等效长度但每个对象大小不同的 calloc 调用之间是否有任何具体区别?

Is there any specific difference between calloc calls of equivalent length but different per-object size?

// Is

calloc(10, 5);

// exactly the same as 

calloc(50, 1);
calloc(25, 2);

等在所有可能的情况下?

你可以想象 calloc(m, n) 100% 完全等同于

p = malloc(m * n);
if(p) memset(p, 0, m*n);

有很多关于对齐的问题,但答案是 "no, calloc doesn't do anything special -- that is, doesn't do anything different than plain malloc -- with respect to alignment"。

如果 m*n 太大而无法分配(或者对于类型 size_t 来说太大而无法表示),显然会出现问题,但是如果您尝试分配那么多,几乎所有的赌注关闭。 (但是话虽如此,如果 m*n 大到足以使 calloc 失败,我怀疑结果可能会明显不同,甚至可能 需要 标准与此处给出的简化代码明显不同。)

最后,由 calloc 完成的归零肯定 到所有位 0,就像 memset 一样,这可能对初始化指针有影响或某些架构上的浮点数。

另见 C FAQ list, question 7.31