c++ - 指向相同内存位置但不同程序的指针
问题描述
我编写了两个程序,一个(p1.cpp)每 1 秒打印一次变量的值和地址。
// p1.cpp
int main() {
int x = 13;
int *p = &x;
while (true) {
cout << " value of x: " << *p << " addr: " << p << endl;
sleep(1);
}
}
另一个(p2.cpp),我手动将指针指向 p1.cpp 打印的位置并更改值。
//p2.cpp
int main() {
int *p = (int*)0x61ff08; // this is manually set and compiled.
cout << "value of p from p2.cpp : " << *p << endl;
*p = 10;
}
但是,在运行 p1.cpp、设置位置并运行 p2.cpp 后,第一个程序中的值似乎没有改变。事实上,如果我显示 p 的内容,p2.cpp 会显示一些垃圾值。
我想知道为什么会发生这种情况以及为什么 x 的值没有被另一个程序的指针改变。
谢谢!
解决方案
在 linux、windows 或 MacO 等现代操作系统中,每个进程都有自己的虚拟内存地址空间。因此,程序 p1 的进程的内存地址与程序 p2 的进程的内存无关。
如果你真的想直接访问进程之间的内存,你需要使用共享内存。
但是你的意图是什么?你只是想玩玩,还是想在进程之间进行通信?在后一种情况下,您应该阅读 IPC - 进程间通信。您可以使用许多 IPC 机制,例如命名管道、套接字或共享内存,具体取决于您想要实现的目标。
您可以查看这篇文章以了解该主题的首次介绍:https ://en.wikipedia.org/wiki/Inter-process_communication
推荐阅读
- python - 我的代码中的播放器没有停止。谁能告诉我这段代码是否有任何错误?
- c# - 使用自定义帐户作为应用程序池标识从 IIS 检测 USB 令牌
- python - PyTorch 中带有 dropout 正则化的逻辑回归
- java - macOS 上的 LWJGL:尝试使用着色器但未渲染任何内容
- python - PySimpleGUI:如何从文件浏览器中选择图像并保存到另一个文件夹
- jmeter - 如何使用 UDP JMeter 插件发送 UDP TFTP 流量
- npm - 模块化 Vaadin Flow 应用程序。前端资源动态加载
- laravel - 当我的登录表单中从未出现记住复选框时,为什么 Laravel 会为我的一些用户生成一个 remember_me 令牌?
- javascript - 添加类的动态创建的 div 没有样式
- gcc - 有没有办法解决 GDB 9.2 的函数序言问题或在 GCC 9.3 中禁用它的生成?