gpt4 book ai didi

c - 堆内存分配

转载 作者:IT王子 更新时间:2023-10-28 23:30:30 26 4
gpt4 key购买 nike

如果我在我的程序中使用 malloc() 动态分配内存,但我在程序运行时没有释放内存,那么动态分配的内存会在程序终止后释放吗?

或者如果它没有被释放,并且我一遍又一遍地执行同一个程序,它会每次分配不同的内存块吗?如果是这种情况,我应该如何释放该内存?

注意:我能想到的一个答案是重新启动我正在执行程序的机器。但是如果我在远程机器上执行程序并且重启不是一个选项?

最佳答案

简短回答:一旦您的进程终止,任何合理的操作系统都会释放该进程分配的所有内存。所以不,当您多次重新启动进程时,内存分配不会累积。


进程和内存管理通常是操作系统的责任,因此在进程终止后是否释放分配的内存实际上取决于操作系统。不同的操作系统可以以不同的方式处理内存管理。

话虽如此,任何合理的操作系统(尤其是多任务操作系统)都会在进程终止后释放进程分配的所有内存。

我认为这背后的原因是操作系统必须能够优雅地处理异常情况:

  • 恶意程序(例如那些不故意释放内存,希望影响它们运行的​​系统的程序)
  • 程序异常终止(即程序意外结束,因此可能没有机会显式释放其动态分配的内存本身)

任何称职的操作系统都必须能够处理这种情况。它必须将系统的其他部分(例如自身和其他正在运行的进程)与故障进程隔离开来。如果没有,进程的内存泄漏将传播到系统。这意味着操作系统会泄漏内存(这通常被认为是一个错误)。

保护系统免受内存泄漏的一种方法是确保一旦进程结束,它使用的所有内存(可能还有其他资源)都被释放。

关于c - 堆内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32153924/

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