【发布时间】:2018-06-12 09:32:44
【问题描述】:
自从我为微控制器编写代码以来,它一直是白纸,我正在尝试用 C 重构一些代码以在这样的设备上工作。
我有一行代码:
Pieces = calloc(ARRAYSIZE, sizeof(struct piece));
http://www.cplusplus.com 声明 calloc:
为一个由 num 个元素组成的数组分配一块内存,每个元素的长度为 size 个字节
那么等效的 malloc 操作会是:
Pieces = Malloc(ARRAYSIZE*sizeof(struct piece));
不管这些位没有被设置为 0,那不是一样吗?还是我必须为 ARRAYSIZE 次分配一块内存?
希望你能帮忙。
【问题讨论】:
-
是的,malloc 接受一个以字节为单位的大小参数(您是说 stdlib 的
malloc?) -
是的 - 就分配而言,您拥有的东西是等效的。但是存在细微的差异(这对您的用例可能很重要,也可能无关紧要)。见:stackoverflow.com/q/1538420/1275169
-
ARRAYSIZE*sizeof(struct piece)可能会导致无法检测到的溢出。calloc(ARRAYSIZE, sizeof(struct piece))可以检测到太大的产品。