[技术手册] 从堆(heap)中动态分配内存问题

[复制链接]
982|9
 楼主| AdaMaYun 发表于 2023-12-17 14:00 | 显示全部楼层 |阅读模式
尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。

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

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

  1. char *ptr;
  2. if ((ptr = (char *)malloc(0)) == NULL)
  3.   puts("Got a null pointer");
  4. else
  5.   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语言标准所允许的

确实,本来以为会有问题,实际一测没问题
LOVEEVER 发表于 2023-12-19 10:08 | 显示全部楼层
malloc(0)返回的指针指向的空间,可能不能被访问。
OKAKAKO 发表于 2023-12-19 10:19 | 显示全部楼层
动态分配内存用malloc函数
小小蚂蚁举千斤 发表于 2023-12-19 10:35 | 显示全部楼层
malloc(0)学习到了
中国龙芯CDX 发表于 2023-12-21 09:19 | 显示全部楼层
malloc其实就是分配动态内存的
星辰大海不退缩 发表于 2023-12-21 12:26 | 显示全部楼层
char *ptr;这个定义指针用来访问动态内存
szt1993 发表于 2023-12-22 12:38 | 显示全部楼层
malloc其实就是分配动态内存的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

308

主题

2692

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部