【发布时间】:2011-07-06 05:54:48
【问题描述】:
我写了一个小程序来检查 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 包含一个标头将确保标头是字对齐的。有cmets吗?
更新2: 如果你被要求在没有填充的情况下有效地使用内存,唯一的方法是创建一个特殊的内存分配器吗?或者是否可以禁用填充?
【问题讨论】:
-
你可以用预处理宏、shift + 和打包它们
-
@Gabriel,你能详细解释一下吗?
-
你是如何从内存地址中确定char的sizeof的?
-
丹尼尔问对了问题。您的问题基于错误的假设。
-
也许可以试试 char* myArray = malloc(sizeof(char)*4);我的数组[0] = 0; ……然后看那个?可能是您使用堆栈变量导致实验失败。
标签: c data-structures struct size char