为什么同一个内存地址,不同程序读出的数值不一样?(C语言程序)

2024-11-23 15:26:45
推荐回答(5个)
回答1:

说实话你没造成内存访问违规算你运气好。你试着输7ffe0000看看?不访问违规才怪。根据你输入的地址,这个地方一般都是进程的主线程堆栈区域,或者进程的动态堆区域。这个地方的所有内存页面都是可读可写的。而为什么同一地址在不同程序中有不同的值?因为在windows系统中你所看到的所有地址都是虚拟地址。每个进程都有完全独立的4GB虚拟地址空间,A进程的0x00300000被映射到物理页面1上,B进程的0x00300000被映射到物理页面2上。虽然他们的虚拟地址相同,但是被映射的物理页面时完全不同的。

回答2:

因为你这个是两个工程,不属于同一个工程内
这两个工程分配给各自变量分配的地址就不一样

回答3:

不同进程有自己的虚拟内存空间
所以不同进程的同一个虚拟地址指向的不是同一块物理内存
建议看看虚拟内存相关的资料

回答4:

看是什么存储区,动态存储区里地址是死的,程序变量是活的,你运行某个程序的时候变量对应该地址,你运行另一个程序的时候另一个变量对应这个地址

回答5:

两个程序,地址空间是不一样的