我只是好奇堆栈上的变量(指针)的地址长度与堆之间是否存在任何关联.在很多情况下,我发现与堆相比,堆栈变量通常更长.例如,考虑以下简单测试:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i = 0;
int *j = malloc(sizeof(int)); *j = 0;
printf("&i = %p\n j = %p\n", &i, j);
free(j);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
&i = 0x7fffe9c7fa5c
j = 0x100e010
Run Code Online (Sandbox Code Playgroud)
这些结果是在linux下使用获得的gcc; 这可能是OS /编译器依赖吗?
结果取决于堆和栈在程序地址空间中的位置。这些是由链接器和处理器架构决定的。
由于ASLR的原因,现代系统上的确切数字应该是随机的。
然而,堆通常会向上增长,并向下堆叠。此外,出于性能和内存管理的原因,堆和堆栈始终从页边界开始。
| 归档时间: |
|
| 查看次数: |
305 次 |
| 最近记录: |