我读过malloc函数在堆上分配内存,其中堆驻留在OS(Linux)的虚拟内存中。所以我很怀疑:
如果正在使用malloc进行内存分配的进程被kill或exit本身终止而不释放内存。操作系统会在终止后将内存释放到虚拟内存中吗?
答案 0 :(得分:1)
Will that memory be deallocated by the OS after the termination?
是的,但是我不会真的称之为解除分配(例如,在所有分配之后,没有人会调用free());发生的事情是,分配给您的进程的虚拟地址空间(包括堆栈,堆,代码,.bss和任何其他分段)只是从操作系统中删除,因此任何映射到您的进程虚拟内存的物理内存区域将被其他任何人使用(无需交换/退出)。
有关详细信息,请阅读this excellent article。
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。
答案 1 :(得分:0)
分配给进程的内存在正常或以其他方式终止时被释放。设置/检查堆大小use 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