c - 主函数中的第一个变量地址是否固定?
问题描述
当我试图打印 main 函数中第一个变量的地址时,我发现运行几次后结果总是相同的。为什么?是虚拟内存还是物理内存?
#include <stdio.h>
int main()
{
int a;
printf("a's address is %p\n", &a);
return 0;
}
我预计每次输出都会不同,但实际输出始终是 0028FF3C
解决方案
在某些系统上,启用ASLR是有充分理由的。
例如,在我的 Linux/Debian/Sid x86-64 上,您的程序每次都会给出不同的地址:
repeat 10 tmp/sange
a's address is 0x7fff2768303c
a's address is 0x7ffc5d26a57c
a's address is 0x7ffcc0a4b2ac
a's address is 0x7ffeec95fd7c
a's address is 0x7ffefd5318dc
a's address is 0x7ffc544497bc
a's address is 0x7fff232f7dac
a's address is 0x7fff9dd3b65c
a's address is 0x7fff9e6858dc
a's address is 0x7ffc2876d4bc
要了解更多信息,请阅读未定义的行为(例如Lattner 的博客)、未指定的行为,并阅读一本关于操作系统的好教科书,例如操作系统:三个简单的部分(可免费下载)
另请阅读有关虚拟地址空间的信息。
推荐阅读
- c - 在指针之间进行算术运算的正确方法
- xpath - 如何在 Xquery 函数 (BaseX) 中将字符串转换为 Xpath
- spring-integration - Spring响应式文件集成
- sql - 重构一个字段及其在 Django 中的引用
- flutter - Flutter 应用被 Google Play 商店拒绝:HostnameVerifier 的不安全实现
- r - 计算变量的每个因子水平的 sd()
- reactjs - 'HTMLCanvasElement | 类型的参数 null' 不可分配给类型参数
- r - Tmap:自定义连续图例值而不改变比例
- c - C:使用while循环收集用户输入并存储在数组中
- c++ - 如果一个对象设法重置/删除它自己的一个 unique_ptr 会发生什么?