总是(可移植)释放并为进程释放内存或返回操作系统

Adi*_*gal 6 c malloc

我已经读过free()"一般"不会将内存返回给操作系统.我们可以移植使用free()的这个功能吗?例如,这是便携式吗?

 /* Assume I know i would need memory equivalent to 10000 integers at max
    during the lifetime of the process */

 unsigned int* p = malloc(sizeof(unsigned int) * 10000);

 if ( p == NULL)
  return 1;

 free(p);

 /* Different points in the program */

 unsigned int* q = malloc(sizeof(unsigned int) * 5);

 /* No need to check for the return value of malloc */
Run Code Online (Sandbox Code Playgroud)

我正在编写一个演示版,我事先知道call contexts要支持多少.

是否可以提前分配"n"数量,"call contexts" structures然后free立即分配.这能保证我未来的malloc电话不会失败吗?

这对我的效率有什么好处吗?我想的是,如果最初获得一个大块并且现在可以免费获得,那么内存管理会更好地进行内存管理.这会导致更少的碎片吗?

Ama*_*9MF 7

最好保留分配的初始内存块,然后使用池将其提供给应用程序中的客户端.依靠深奥的行为来维护代码的稳定性并不是一种好的形式.如果有任何变化,你可能会处理坏指针并导致程序崩溃.


dmc*_*kee 5

您正在寻求一种可移植的低级方法来控制内存接口操作系统端发生的情况.

任何操作系统上(因为c是最广泛移植的语言之一).

考虑一下,请记住,操作系统的结构和目标各不相同,并且需求和属性有很多不同.

通常的c API只能定义界面的c外观和行为方式,而不是操作系统方面的内容.