And*_*rew 1 c++ memory pointers heap-memory
那么,是否可以像这样在 C++ 中创建一个指针,并将其打印出来:
#include <iostream>
int main() {
int* ptr = new int;
(*ptr) = 3;
std::cout << ptr << '\n';
}
Run Code Online (Sandbox Code Playgroud)
然后运行它,复制 ptr 的值,并在另一个程序中,当它正在运行时,执行以下操作:
#include <iostream>
#include <cstring>
int main() {
long long pointer;
std::cin >> pointer;
int* ptr = nullptr;
std::memcpy(&ptr, &pointer, sizeof(pointer));
std::cout << *ptr << '\n';
}
Run Code Online (Sandbox Code Playgroud)
并打印出 3 个?有可能吗,或者如果没有,那究竟是为什么?
这在标准 C++ 中是不可能的。标准 C++ 没有程序s的概念。就语言而言,只有一种程序——目前正在翻译的程序。
在 C++ 标准之外,确实存在多任务操作系统,可以同时运行多个进程(您现在可能正在使用一个)。这种操作系统使用虚拟内存,一个进程不能直接访问另一个进程的虚拟内存。
process_vm_readv
如果您有足够的权限,那么在技术上是可行的,例如使用系统调用(特定于Linux)。在使用这种技巧之前,您必须以某种方式传达您想要读取的进程 ID 和虚拟地址,这些在第一个程序运行之前是未知的。
尽管有可能,但这可能不是您需要做的事情,除非您可能正在实施调试器或类似工具。如果您只想这样以便进程可以通信,还有其他方法。没有 C++ 标准的方式,因为 C++ 不知道进程,但例如 POSIX 标准指定了许多进程通信的方式:共享内存、文件、网络套接字等。