我想問一下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