【发布时间】:2026-01-25 14:40:01
【问题描述】:
我有一个像这样的 c 程序
main.c
#include <stdio.h>
#define SOME_VAR 10
static int heap[SOME_VAR];
int main(void) {
printf("%p", heap);
return 0;
}
当我运行编译的程序几次时输出这个
0x58aa7c49060
0x56555644060
0x2f8d1f8e060
0x92f58280060
0x59551c53060
0xd474ed6e060
0x767c4561060
0xf515aeda060
0xbe62367e060
为什么总是以 060 结尾?并且数组存储在堆中吗?
编辑:我在 Linux 上,我开启了 ASLR。我使用 gcc 编译了程序
【问题讨论】:
-
什么操作系统?什么编译器?
-
变量不在堆中,在程序地址空间的数据或bss部分,见en.wikipedia.org/wiki/Static_variable。我的猜测是程序将始终放置在某个边界的内存地址,例如可被 0x1000 整除,并且该变量由编译器放置在程序地址空间中的固定偏移处。