Memory management free()是否立即释放内存

Memory management free()是否立即释放内存,memory-management,malloc,vxworks,Memory Management,Malloc,Vxworks,在我的程序中,我使用malloc分配大量内存(几百MB,一次分配25mb到75mb的内存块),随后释放一些内存块,然后再次重新分配一些内存块。我的问题是,当我使用free()来释放内存时,它是立即释放相关的内存块,还是仅仅将其标记为释放。如果它只是为了以后释放而做的标记,是否有一些标准的C库函数来强制立即释放它 实际上,我需要开发我的程序,使其能够在linux和vxworks之间移植。在Vxworks中,在我正在使用的一个库(vsipl)中,我发现“free”并没有在调用时立即释放 答案取决于m

在我的程序中,我使用malloc分配大量内存(几百MB,一次分配25mb到75mb的内存块),随后释放一些内存块,然后再次重新分配一些内存块。我的问题是,当我使用free()来释放内存时,它是立即释放相关的内存块,还是仅仅将其标记为释放。如果它只是为了以后释放而做的标记,是否有一些标准的C库函数来强制立即释放它


实际上,我需要开发我的程序,使其能够在linux和vxworks之间移植。在Vxworks中,在我正在使用的一个库(vsipl)中,我发现“free”并没有在调用时立即释放

答案取决于malloc和自由实现。然而,我可以有把握地说,在几乎任何实现中,内存都不会被释放。相反,它会返回到一个池中,在那里它可以被流程重用


如果您使用的是大内存块,通常最好使用操作系统内存功能并自行管理内存。但是,将页面映射到内存中或从内存中映射出来并不是一个好主意。

这取决于释放的含义-大多数malloc实现维护一个或多个内存池以满足malloc请求-当一个块被释放时,它只是返回到一个池中。