c++ - 如何从内存中访问特定值
问题描述
我有以下代码:
int main {
int* x = new int;
*x = 5;
std::string input = " ";
while (true) {
std::cin >> input;
if (input == "show") {
std::cout << *x << " " << x << "\n"; // Output value and address of x if "show" is the console input
}
else if (input == "exit") { // Close the program if "exit" is the console input
break;
}
}
delete x;
}
此代码应输出 x 的值和地址。这看起来像这样:
5
0000020445E210E0
现在我需要另一个带有指向地址的指针的外部 c++ 程序,x
以便它可以更改x
. 但是我怎样才能创建一个指向这个确切地址的指针来改变值呢?
解决方案
现在我需要另一个带有指向 x 地址的指针的外部 c++ 程序,以便它可以更改 x 的值。但是我怎样才能创建一个指向这个确切地址的指针来改变值呢?
你不能。在支持多处理的(现代)系统上,每个进程都有不同的虚拟内存空间,通常不能指向其他进程的内存。
一些替代方案:
- 您可以在共享内存中创建一个动态对象。在 C++ 中没有分配共享内存的标准方法。
- 通常,您需要某种形式的锁定来避免竞争条件。您可以使用进程间互斥体/信号量。C++ 中没有标准的进程间互斥体/信号量。
- 您可以传递指向对象的值,而不是处理指针。以下所有替代方案都需要将数据序列化为字节流。C++ 中没有将任意数据序列化为字节流的标准方法。与此列表中的其他内容不同,序列化至少可以在不依赖任何操作系统接口的情况下实现。
- 您可以使用管道。C++ 中没有创建管道的标准方法。
- 您可以使用消息队列。C++ 中没有创建进程间消息队列的标准方法。
- 网络套接字通常用于进程间通信。这允许通过网络进行通信,但也适用于同一系统上的进程之间。在 C++ 中没有标准的网络连接方式。
- 您可以诉诸在一个进程中写入文件并在另一个进程中读取。虽然在标准 C++ 中可以进行文件访问,但没有标准的方法来锁定文件,这在多处理中避免竞争条件是必不可少的。在 C++ 中也没有标准的方法来获取更改文件的通知。
正如您可能已经从列表中注意到的那样,在 C++ 中根本没有用于 IPC 的标准方法。
推荐阅读
- assembly - 存在用于 (rv64ima-lp64) 软浮点编译的 risc-v 浮点指令
- java - KeyEvent 不打印命令
- javascript - 对 addEventListener() 使用 setTimeout
- c++ - 在 C/C++ 中正确链接的一般提示
- javascript - 如何在不改变布局的情况下正确调整 iframe 的大小?
- swiftui - SCNSceneRendererDelegate 中的渲染器函数只通过输入调用,不会自动调用
- c# - 如何尽快释放被占用但对象较大的内存?
- r - 类似于动物园熊猫的滚动平均函数
- python - 更新密码时如何解决用户注销?
- mysql - Mysql json字段-按参数过滤