c++ - 你能从一个单独的程序中删除动态分配的内存吗?

标签 c++ memory-management virtual-address-space

这个问题纯粹是出于好奇。最近了解到如果在Heap中动态分配内存空间,删除内存空间是非常重要的。我的问题是,如果内存空间的地址已知,是否可以使用不同的 C++ 程序(从创建内存空间的程序)删除动态分配的内存空间?

这是一个例子:

CODE01.CPP

#include <iostream>
using namespace std;

int main() {
    int *a = new int;
    cout << a;
    int foo;
    cin >> foo;  // for blocking the program from closing.
    return 0;
}

CODE01.CPP 的输出(比方说)

0x7c1640

CODE02.CPP

#include <iostream>
using namespace std;

int main() {
    int *a = (int*)0x7c1640;
    delete a;
    return 0;
}

这行得通吗?如果我先运行 code01.cpp,然后立即运行 code02.cpp,Heap 中的内存会被删除吗?

最佳答案

任何现代操作系统都会为这两个程序创建一个单独的虚拟地址空间。因此,您在 code01.cpp 中打印的地址仅与该程序相关,您无法从 code02.cpp 访问地址空间。

所以回答你的直接问题:运行 cpp02.cpp 不会以任何方式影响仍在运行的 cpp01.cpp 的状态。

关于c++ - 你能从一个单独的程序中删除动态分配的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58344031/

相关文章:

c++ - 基类中使用 this 指针的模板函数

ios - 如何在 ARC 下的 Instruments 中激活 Cycles 报告?

c++ - wxWidgets 中的自定义内存分配

memory - 为什么 32 位操作系统支持 4 GB RAM?

c++ - 虚拟内存和核心转储之间的关系

c# - 如何检查 exe 是否设置为 LARGEADDRESSAWARE

c++ - 在 C++ 中重新分配指针数组,仅使用 new 和 delete

c++ - cpp 中的引用如何具有相同的内存地址?

c++ - 关于创建 boost.asio async_xxxx 处理程序对象

objective-c - 自动释放的对象什么时候真正释放?