C没有垃圾收集,因此每当我们使用malloc / calloc / realloc分配内存时,我们需要在使用结束后手动释放它。如何处理其他数据类型的变量,如int,char等?如何释放分配给这些变量的内存?
答案 0 :(得分:4)
这取决于。如果您使用malloc/calloc/realloc
分配任何这些数据类型,则仍需要free
个。
另一方面,如果在函数内声明了一个变量,它们被称为自动变量,只要该函数结束,它们就会被自动收集。
这里的要点不是数据类型本身,是存储位置。 malloc/calloc/realloc
在堆中分配内存,而自动变量(在函数内声明的变量)在堆栈中分配。
堆完全由程序员管理,而堆栈的工作方式是当函数结束时,堆栈帧收缩,占用该帧的每个变量将在另一个函数时被自动覆盖被称为。
要掌握更好的感受,请查看the memory layout of a C program。其他有用的参考可能是free(3)
man page和Wikipedia page for Automatic variables。
希望这有帮助!
答案 1 :(得分:1)
资源(例如内存)与变量无关。你永远不必考虑变量。您只需要考虑资源本身,并且需要管理资源的生命周期。有些函数调用获取资源(例如malloc
)并为您提供资源的句柄(例如void指针),您必须稍后调用另一个函数(例如free
)使用该句柄释放资源。
内存只是一个例子,C标准I / O文件的工作方式与mutex,套接字,窗口句柄等相同(在C ++中,将“动态分配的对象”添加到列表中。)但是概念是资源的概念,需要获取和释放的东西。变量与它无关,除了可以使用变量来存储资源句柄这一小事实。