[英]Different programs, same variables, same address in memory
我有两个C代码。 test.c是
#include <stdlib.h>
int main ()
{
int a;
a = 5;
return a;
}
test2.c是
#include <stdlib.h>
int main ()
{
int a;
a = 6;
return a;
}
当我运行它们时,我用gdb检查了“ a”内存中的地址,我得到了相同的地址。 为什么会这样呢?
断点1,在test.c:7的main()返回7; (gdb)打印&a $ 1 =(int *)0x7fffffffe1cc
断点1,在test2.c:7的main()返回7; (gdb)打印&a $ 1 =(int *)0x7fffffffe1cc
地址“ a”在程序的堆栈框架中。 这是一个虚拟地址,与程序实际加载到物理内存中的位置无关。 因此,如果两个(几乎相同)的程序都使用相同的地址就不足为奇了。
您的操作系统很有可能正在使用虚拟内存进行内存管理。 这意味着在给定程序中找到的地址未1:1映射到物理内存。 这允许很多事情(包括运行多个需要通过页面交换到磁盘来占用大量内存的程序)。 如果没有虚拟内存,则如果要分配static int a
而不是将其放在堆栈上,则链接程序将最好为它选择一个地址。 如果您随后链接了另一个程序,它将不知道还有哪些其他程序正在使用该地址。 运行两个程序可能会占用另一个程序的内存。 使用虚拟内存,每个程序都使用自己的地址0x0
和自己的地址0x7fffffffe1cc
获取自己的内存片。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.