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