gpt4 book ai didi

c++ - 指向相同内存位置但不同程序的指针

转载 作者:行者123 更新时间:2023-12-04 12:08:55 25 4
gpt4 key购买 nike

我写了两个程序,一个 (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 会显示一些垃圾值。
output of p1.cpp
output of p2.cpp
我想知道为什么会发生这种情况以及为什么 x 的值没有被另一个程序的指针改变。
谢谢!

最佳答案

在 linux、windows 或 MacOs 等现代操作系统中,每个进程都有自己的虚拟内存地址空间。
因此,程序 p1 进程的内存地址与程序 p2 进程的内存无关。
如果您真的想直接在进程之间访问内存,则需要使用共享内存。
但是你的意图是什么?你只是想玩玩,还是想要进程之间的通信?在后一种情况下,您应该阅读 IPC - 进程间通信。您可以使用许多 IPC 机制,例如命名管道、套接字或共享内存,具体取决于您想要实现的目标。
你可以看看这篇文章,第一次介绍这个话题:https://en.wikipedia.org/wiki/Inter-process_communication

关于c++ - 指向相同内存位置但不同程序的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68619670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com