我已经编辑1.c如下。
#include<stdio.h> int x=100; int main(voID) { printf("%p",&x); while(1); return 0; }
然后打开命令提示符并运行该程序,程序仍在运行时得到输出00402000。 现在我运行2.c
#include<stdio.h> int main(voID) { int *p=(int *)0x00402000; printf("%d",*p); return 0; }
在另一个命令提示符的实例中,得到了-1的输出,我期望100位于00402000的位置。请解释为什么是这种行为?
防止内存碎片
linux如何知道进程使用了多less物理内存?
OOM杀手(内存不足)与大量的内存(?!) – inotify
从C ++应用程序代码调用linux系统调用?
当多个用户同时访问时,多less程序/类的拷贝被加载到内存中
如何确定linux中的可用物理内存
八度 – 内存不足或维度过大,八度的索引types
从用户模式访问内核内存(windows)
linux:如何获得进程使用的交换?
在windows中,我怎样才能用`new`replace`GlobalAlloc`?
首先,让我说在现代 *** 作系统中,程序看到的地址值(如0x00402000) 不是物理地址。 它们是虚拟地址,它们对于拥有进程是私有的(即在其他进程中没有意义或者意味着别的东西),并且通过基于cpu的机制(“分页单元”)映射到物理地址,只有OS具有掌控。
如果你想在不同的进程之间共享一个变量,就有一种称为共享内存的机制。 阅读它。 相关的API是CreatefileMapPing ,第一个参数是INVALID_HANDLE_VALUE , MapVIEwOffile , OpenfileMapPing 。 还有其他的进程间通信方式。
如果你想读取进程的“内存没有这个进程”明确的合作,你需要阅读调试API。 这比使用共享内存要复杂得多。
顺便说一下,你编码的是一个典型的未定义的行为。
似乎是未定义的行为。 由于用户的进程只允许访问已经分配给它的内存。 所以当你尝试访问有关地址的内存时,你分配一个无效的地址,并且你正在运行到未定义的行为。
为了演示地址空间的概念,修改你的第二个例子:
#include<stdio.h> int y = 101; int main(voID) { int *p=(int *)0x00402000; // hope this works?? printf("%d",*p); printf("%p",p); // print value of p to ensure correct assignment return 0; }
它可能/可能打印“101”! 这是因为OS将每个地址空间视为相同。 所以, int全局变量var不管它的名字可能被分配到位置0x004002000。
总结以上是内存溢出为你收集整理的如何访问分配给不同进程的内存?全部内容,希望文章能够帮你解决如何访问分配给不同进程的内存?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)