例如,如果我在C字符串上分配更多的内存空间,有没有办法返回未使用的内存?或者这是自动完成的吗?
char *x = malloc(256);
strcpy(x, "Hello World");
// return back unused x memory allocation
答案 0 :(得分:7)
您可以致电realloc
来更改分配的大小;这可以用来使它更大或更小。
计算机无法自动减少分配。
答案 1 :(得分:2)
它不会自动完成。这两者都是关于手动内存管理的好消息。
您需要显式调用free(x);
以将内存释放回操作系统。跟踪malloc()
/ free()
对是很痛苦的,但它会得到回报,因为您可以对程序使用的内存进行细致的控制。
如果您只想分配确切的内存量,那么您应该这样做。通常,当您致电malloc()
时,您不知道编译时的分配大小,因此通常您将分配完全内存量。
如果你想要一个增长/缩减内存缓冲区,你应该考虑malloc()
是一个昂贵的调用这一事实。所以你通常会分配足够的 - 一个很好的估计你需要多少 - 内存然后当你知道它不会增长时缩小它,或者如果估计太少就增长它。