我读到 malloc 函数在堆上分配内存,堆驻留在 OS(Linux)中的虚拟内存中。所以我有几个疑问:
如果正在使用 malloc 分配内存的进程被 kill 或退出本身终止而不释放内存。该内存是否会在终止后由操作系统释放,因为它位于虚拟内存中?
- 我如何知道 Linux 操作系统中的堆大小?
- 如何在 Linux 操作系统中更改堆大小?
我读到 malloc 函数在堆上分配内存,堆驻留在 OS(Linux)中的虚拟内存中。所以我有几个疑问:
如果正在使用 malloc 分配内存的进程被 kill 或退出本身终止而不释放内存。该内存是否会在终止后由操作系统释放,因为它位于虚拟内存中?
Will that memory be deallocated by the OS after the termination?
是的,它会,但我不会真正调用该释放(如在所有分配之后没有人会调用 free());发生的情况是分配给您的进程的虚拟地址空间(包括堆栈、堆、代码、.bss 和任何其他段)只是从操作系统中删除,因此映射到您的进程虚拟内存的任何物理内存区域其他任何人都可以使用(无需换入/换出)。有关这方面的更多信息,请阅读这篇出色的文章。
How can I know heap size in Linux OS?
ulimit -m
How can I change the heap size?
ulimit -S -m X(其中 X 是以千字节为单位的堆限制)
有关更全面的解释,请访问这个SO question。
当进程正常或以其他方式终止时,分配给进程的内存将被释放。要设置/检查堆大小,请使用 ulimit:
ulimit -m # shows heap per process
ulimit -S -m 1000 # set heap size to 1000 * 1024 bytes
ulimit -S -m unlimited # unlimited heap size