我写了一个小程序来检查 char 在内存中占用了多少字节,它显示 char 实际上在内存中占用了 4 个字节。我知道这主要是因为字对齐,并且没有看到 char 只有 1 个字节的优势。为什么不使用 4 个字节作为 char?
int main(void)
{
int a;
char b;
int c;
a = 0;
b = 'b';
c = 1;
printf("%p\n",&a);
printf("%p\n",&b);
printf("%p\n",&c);
return 0;
}
输出:
0x7fff91a15c58
0x7fff91a15c5f
0x7fff91a15c54
更新:
我不相信 malloc 只会为 char 分配 1 个字节,即使 sizeof(char) 作为参数传递,因为 malloc 包含一个标头将确保标头是字对齐的。任何意见?
更新2:
如果要求您在没有填充的情况下有效使用内存,唯一的方法是创建一个特殊的内存分配器吗?或者是否可以禁用填充?
你有 int、char、int
请参阅“为什么限制字节对齐?”下的图片。http://www.eventhelix.com/realtimemantra/ByteAlignmentAndOrdering.htm http://www.eventhelix.com/realtimemantra/ByteAlignmentAndOrdering.htm
Byte 0 Byte 1 Byte 2 Byte 3
0x1000
0x1004 X0 X1 X2 X3
0x1008
0x100C Y0 Y1 Y2
如果以 4 字节、1 字节和 4 字节的形式存储它们,则需要 2 个 cpu 周期来检索int c
以及一些位移以使 c 的实际值正确对齐以用作 int。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)