打印
[技术手册]

从堆(heap)中动态分配内存问题

[复制链接]
121|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AdaMaYun|  楼主 | 2023-12-17 14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。

那么嵌入式系统中,动态分配内存可能发生的问题是什么?

这 里,我期望应试者能提到内存碎片,碎片收集的问题,变量的持行时间等等。这个主题已经在ESP杂志中被广泛地讨论过了(主要是  P.J. Plauger, 他的解释远远超过我这里能提到的任何解释),回过头看一下这些杂志吧!让应试者进入一种虚假的安全感觉后,我拿出这么 一个小节目:下面的代码片段的输出是什么,为什么?

char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
  puts("Got a null pointer");
else
  puts("Got a valid pointer");

这 是一个有趣的问题。最近在我的一个同事不经意把0值传给了函数malloc,得到了一个合法的指针之后,我才想到这个问题。这就是上面的代码,该代码的输 出是"Got a valid pointer"。

我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确。

得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些。

使用特权

评论回复
沙发
forgot| | 2023-12-18 11:43 | 只看该作者
malloc(0)这个行为是被C语言标准所允许的。
malloc(0)返回的不一定是空指针,不同环境产生的结果不同。
malloc(0)返回的指针指向的空间,可能不能被访问。

使用特权

评论回复
板凳
jf101| | 2023-12-19 09:17 | 只看该作者
malloc(0)这个行为是被C语言标准所允许的

使用特权

评论回复
地板
AdaMaYun|  楼主 | 2023-12-19 09:43 | 只看该作者
jf101 发表于 2023-12-19 09:17
malloc(0)这个行为是被C语言标准所允许的

确实,本来以为会有问题,实际一测没问题

使用特权

评论回复
5
LOVEEVER| | 2023-12-19 10:08 | 只看该作者
malloc(0)返回的指针指向的空间,可能不能被访问。

使用特权

评论回复
6
OKAKAKO| | 2023-12-19 10:19 | 只看该作者
动态分配内存用malloc函数

使用特权

评论回复
7
小小蚂蚁举千斤| | 2023-12-19 10:35 | 只看该作者
malloc(0)学习到了

使用特权

评论回复
8
中国龙芯CDX| | 2023-12-21 09:19 | 只看该作者
malloc其实就是分配动态内存的

使用特权

评论回复
9
星辰大海不退缩| | 2023-12-21 12:26 | 只看该作者
char *ptr;这个定义指针用来访问动态内存

使用特权

评论回复
10
szt1993| | 2023-12-22 12:38 | 只看该作者
malloc其实就是分配动态内存的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

1274

帖子

3

粉丝