c++ - 堆内存是每个进程的吗? (或)不同进程共享的公共(public)内存位置?

标签 c++ memory-leaks operating-system shared-memory heap-memory

每个进程都可以使用堆内存来存储和共享进程内的数据。我们在编程中有一个规则,每当我们在堆内存中占用一些空间时,我们需要在作业完成后释放它,否则会导致内存泄漏。

int *pIntPtr = new int;
.
.
.
delete pIntPtr;

我的问题:堆内存是每个进程的吗?

如果是,

then memory leak is possible only when a process is in running state.

如果不是,

then it means OS is able to retain data in a memory somewhere. If so, is there a way to access this memory by another process. Also this may become a way for inter-process communication.

我想我的问题的答案是肯定的。请提供您的宝贵意见。

最佳答案

在几乎所有当前使用的系统上,堆内存都是按进程分配的。在没有 protected 内存的旧系统上,堆内存是系统范围的。 (简而言之,这就是 protected 内存所做的:它使您的堆和堆栈对您的进程私有(private)。)

因此,在任何现代系统上的示例代码中,如果进程在调用 delete pIntPtr 之前终止,pIntPtr 仍将被释放(尽管它的析构函数不是int 有一个,不会被调用。)

请注意, protected 内存是一个实现细节,不是 C++ 或 C 标准的特性。系统可以在进程之间自由共享内存(现代系统不会,因为这是让攻击者把你的屁股交给你的好方法。)

关于c++ - 堆内存是每个进程的吗? (或)不同进程共享的公共(public)内存位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3147014/

相关文章:

linux - 通过 fork : unexplainable behaviour 创建进程和子进程

c++ - 我想从此代码中删除 using namespace std,但我不确定所有需要以 std::为前缀的内容

c++ - 递归命名空间成员函数定义

c++ - 指向不同 .h 文件的类指针

ios - 方法泄漏中的对象

java - 如何修复 org.apache.derby.jdbc.AutoloadedDriver 在 Tomcat 关闭时注销失败?

linux - 修改后的linux操作系统的版本控制

c++ - MyClass 对象 = MyClass(); 'MyClass()' 在这里指的是一个临时对象吗?

python - Google ndb 库中的内存泄漏

在socket程序中调用API?