Nik*_*CSB 1 c local-variables memory-layout
我正在尝试使用指向另一个 var 的指针来操纵一个 var 的值的指针,这基于本地 vars 通常如何在 C 程序中堆叠。
int i = 30;
int arr[4];
printf("%d\n", *(arr - 5)); // 30
Run Code Online (Sandbox Code Playgroud)
int arr[4];
int i = 30;
printf("%d\n", *(arr - 5)); // also 30
Run Code Online (Sandbox Code Playgroud)
我认为后者应该打印 30 for *(arr + 5),因为这就是我认为本地变量被推入堆栈的方式,但变量似乎以相同的方式在内存中布置。我想了解这里发生了什么。另外,我假设这是依赖于系统/编译器的。
简短回答:内存布局(不同变量之间)取决于编译器,并且取决于实现。
长答案:编译器可以决定如何为变量分配内存。虽然大多数编译器会按顺序分配内存,但不能保证。特别是在优化时,编译器可能能够消除未使用的变量,或者只是将它们放入寄存器中。
另一个因素是对齐。编译器可能会决定对变量重新排序以减少变量之间的填充。
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |