C没有垃圾收集,因此每当我们使用malloc/caloc/realloc分配内存时,我们都需要在使用结束后手动释放它。C如何处理其他数据类型的变量,如int、char等?分配给这些变量的内存是如何释放的?
这取决于情况。如果使用malloc/calloc/realloc
分配这些数据类型中的任何一种,则仍然需要free
。
另一方面,如果在函数内部声明了变量,则它们被称为自动变量,并且每当该函数结束时,它们都将被自动收集。
这里的重点不是数据类型本身,而是存储位置。malloc/calloc/realloc
在堆中分配内存,而自动变量(函数内部声明的变量)在stack分配。
堆完全由程序员管理,而堆栈的工作方式是,当一个函数结束时,堆栈帧会收缩,当调用另一个函数时,占据该帧的每个变量都会被自动覆盖。
为了更好地理解这些,请查看C程序的内存布局。其他有用的参考资料可能是free(3)
手册页和自动变量的维基百科页面。
希望这能有所帮助!
资源(如内存)与变量无关。你永远不必考虑变量。你只需要考虑资源本身,你需要管理资源的生命周期。有些函数调用获取资源(如malloc
)并为您提供资源的句柄(如void指针),您必须稍后使用该句柄调用另一个函数(如free
)才能释放资源。
内存只是一个例子,C标准I/O文件的工作方式与互斥、套接字、窗口句柄等相同。(在C++中,将"动态分配的对象"添加到列表中。)但核心概念是资源,即需要获取和释放的东西。变量与此无关,除了可以使用变量存储资源句柄这一微不足道的事实。