如果我说calloc(1000,23),23"圆形"到24吗?或者到32?

Meh*_*dad 3 c memory-alignment calloc

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

如果是这样,那么它们是否会向下舍入到2的下一个幂,或者它们是否会转到下一个8或16的倍数?

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

谢谢!

Dan*_*lau 5

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

  • @Lambert:我不相信 - 标准声明*"如果无法分配空间,则返回空指针"*.用户没有要求"nmemb*size"为"<= SIZE_MAX",因此没有用于实现的j-jail卡. (2认同)