3

我想知道,大多数实现是否也calloc将大小视为对齐,并将其四舍五入到下一个支持的粒度?

如果是这样,那么它们是四舍五入到 2 的下一个幂,还是四舍五入到 8 或 16 的下一个倍数?

如果calloc保持参数相同,那么它是如何工作的呢?你的数据不会不对齐吗?

谢谢!

4

2 回答 2

5

sizeof被定义为产生数组中对象的大小——换句话说,它已经考虑了正确对齐所需的任何填充。因此,如果sizeof(foo)某个 object 是 23 foo,那么您的处理器必须是字节对齐的。(另一方面,如果你通过 23 岁是因为你只是认为通过它是一个很好的价值,那么祝你好运;你靠自己。)

于 2011-01-04T02:04:50.700 回答
3

就对齐而言,calloc(1000, 23)恰好等价于malloc(1000 * 23)。如果实现决定以某种方式“对齐”大小,它会将总大小对齐23000到某个更大的实现定义的值。没有对第二个参数calloc(或第一个,就此而言)应用特殊处理。

捕捉2324实际上calloc(1000, 23)意味着捕捉2300024000(就总大小而言)。没有合理的实际实现需要添加整个1000用于对齐目的。

于 2011-01-04T03:09:03.767 回答