如何访问分配给不同进程的内存?

如何访问分配给不同进程的内存?,第1张

概述如何访问分配给不同进程内存

我已经编辑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。

总结

以上是内存溢出为你收集整理的如何访问分配给不同进程的内存?全部内容,希望文章能够帮你解决如何访问分配给不同进程的内存?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1270443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存