我想问一下64位ubuntu Linux中的内存分配问题。64位机内存分配
我有以下代码
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
char buffer_one[8], buffer_two[8];
printf("Size of char: %u\n", sizeof(char));
printf("Buffer_two is at %p\n", buffer_two);
printf("Buffer_one is at %p\n", buffer_one);
}
,并在运行时,下面的结果显示了
$ ./sizeofchar
Size of char: 1
Buffer_two is at 0x7fff98069910
Buffer_one is at 0x7fff98069900
我的问题是,即使char类型的大小为1个字节,我以为(请纠正我,如果我在这里错了)Buffer_two
和Buffer_one
被分配彼此相邻,为什么Buffer_two
和Buffer_one
内存地址分配16个字节。
这是一个严格的实现细节。一个编译器可以自由地分配一个局部变量在它选择的任何地址,你的程序不应该依赖这个地址是任何特定的。 –
我愿意打赌这是一个16字节对齐的优化 –
@Als谢谢,我不是想要依靠这个地址。我只是好奇,如果有特别的理由。 – Wins