等效长度但每个对象大小不同的 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。
// 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。