我很困惑,因为我不知道为什么要这样分配内存。我在int函数内部有三个int变量,而不是main 和一个char数组:
char char_array[16];
int before_int_var = 0;
int int_var = 0;
int after_int_var = 0;
通过gdb运行它之后,我得到了它们的内存位置:
(gdb) x/s char_array
0x7fffffffe050: ""
(gdb) x/x &before_int_var
0x7fffffffe068: 0x00
(gdb) x/x &int_var
0x7fffffffe06c: 0x00
(gdb) x/x &after_int_var
0x7fffffffe064: 0x00
我发现奇怪的是如何分配此内存。我知道为什么after_int_var
具有最小的数目,但是我不明白为什么int_var
具有比before_int_var
变量后面的int_var
更大的内存地址。我也不明白为什么char_array
的内存地址比int变量小得多。
由于变量在程序代码中的位置,我应该这样:
(gdb) x/s char_array
0x7fffffffe070: ""
(gdb) x/x &before_int_var
0x7fffffffe06c: 0x00
(gdb) x/x &int_var
0x7fffffffe068: 0x00
(gdb) x/x &after_int_var
0x7fffffffe064: 0x00
但是我发现,在程序编译期间分配内存时变量的位置似乎无关紧要。我必须说,在我第一次通过gcc编译程序之后,我添加了before_int_var
和after_int_var
。然后,我添加了这些变量并再次对其进行了编译。还是因为我的操作系统/ cpu功能?无论如何,我想知道如何精确地分配内存以及如何在程序创建过程中控制内存的分配。