【发布时间】:2019-08-18 17:14:46
【问题描述】:
(这个问题只涉及逻辑地址)
我正在尝试一些代码,我打印出不同类型/范围的变量的地址,以更好地可视化过程图像。
当我打印出一些由 malloc 在堆上分配的变量的地址时,我产生了困惑,然后出于好奇还打印了 printf 函数的地址。
我发现 printf 被存储在堆上比 malloc 分配的变量更高的地址(即更靠近堆栈)。这对我来说没有意义,因为我假设库函数会在运行时首先在堆上加载,然后再执行任何其他指令。我什至在任何 malloc 语句之前放置了一个 printf 语句,以防库函数在需要时动态加载,但它并没有改变任何东西。
谢谢。
【问题讨论】:
-
使用虚拟内存管理,没有理由对堆栈、堆和代码的地址有任何期望。事实上,Address space layout randomization (ASLR) 专门用于阻止预测地址关系的尝试。
标签: c memory heap-memory