如何在C中返回未使用的已分配内存?

时间:2018-02-04 00:58:36

标签: c string memory malloc

例如,如果我在C字符串上分配更多的内存空间,有没有办法返回未使用的内存?或者这是自动完成的吗?

char *x = malloc(256);
strcpy(x, "Hello World");
// return back unused x memory allocation

2 个答案:

答案 0 :(得分:7)

您可以致电realloc来更改分配的大小;这可以用来使它更大或更小。

计算机无法自动减少分配。

答案 1 :(得分:2)

它不会自动完成。这两者都是关于手动内存管理的好消息。

您需要显式调用free(x);以将内存释放回操作系统。跟踪malloc() / free()对是很痛苦的,但它会得到回报,因为您可以对程序使用的内存进行细致的控制。

如果您只想分配确切的内存量,那么您应该这样做。通常,当您致电malloc()时,您不知道编译时的分配大小,因此通常您将分配完全内存量。

如果你想要一个增长/缩减内存缓冲区,你应该考虑malloc()是一个昂贵的调用这一事实。所以你通常会分配足够的 - 一个很好的估计你需要多少 - 内存然后当你知道它不会增长时缩小它,或者如果估计太少就增长它。