gpt4 book ai didi

c++ - 使用 operator new/malloc 分配的内存块能否在程序执行结束后持续存在?

转载 作者:IT老高 更新时间:2023-10-28 22:32:34 26 4
gpt4 key购买 nike

Possible Duplicate:
When you exit a C application, is the malloc-ed memory automatically freed?

当我阅读有关在 C/C++ 中的动态内存分配方面分别使用 delete/free 的强制性时,我想到了这个问题。我想如果内存分配在我的程序执行终止之后仍然存在,那么是的,它是强制性的;否则,我为什么要担心释放分配的空间?操作系统不会在进程终止时自动释放它吗?我有多正确?我的问题是可以

int *ip = new int(8);

在我的程序终止后仍然存在?

最佳答案

简短回答:不。

长答案:不。C++ 永远不会持久化内存,除非你努力让它这样做。释放内存的原因是这样的:

如果你不释放内存,而是继续分配它,你会在某个时候用完。一旦你用完了,几乎任何事情都可能发生。在 Linux 上,也许 OOM killer 被激活并且您的进程被杀死。也许操作系统将您完全分页到磁盘。如果您使用足够的内存,也许您会给 Windows 盒子一个蓝屏。它几乎可以被认为是未定义的行为。此外,如果您泄漏内存,它只是坐在那里,未使用,未释放,并且在您的进程终止之前没有人可以使用它。

还有另一个原因。当您向分配器释放内存时,分配器可能会保留它,但只需将其标记为可用。这意味着下次你需要内存时,它已经在那里等着你了。这意味着更少调用内核来请求内存,从而提高性能,因为上下文切换非常低效。

编辑:C 和 C++ 标准甚至不保证内存将在终止后由操作系统清理。许多操作系统和编译器可能,但不能保证。尽管如此,所有主要的桌面和移动操作系统(可能是 DOS 和一些非常古老的嵌入式系统除外)都会在它之后清理进程内存。

关于c++ - 使用 operator new/malloc 分配的内存块能否在程序执行结束后持续存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11383401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com