释放C中的其他变量类型

时间:2014-03-03 09:34:30

标签: c pointers garbage-collection malloc

C没有垃圾收集,因此每当我们使用malloc / calloc / realloc分配内存时,我们需要在使用结束后手动释放它。如何处理其他数据类型的变量,如int,char等?如何释放分配给这些变量的内存?

2 个答案:

答案 0 :(得分:4)

这取决于。如果您使用malloc/calloc/realloc分配任何这些数据类型,则仍需要free个。

另一方面,如果在函数内声明了一个变量,它们被称为自动变量,只要该函数结束,它们就会被自动收集。

这里的要点不是数据类型本身,是存储位置malloc/calloc/realloc中分配内存,而自动变量(在函数内声明的变量)在堆栈中分配。

堆完全由程序员管理,而堆栈的工作方式是当函数结束时,堆栈帧收缩,占用该帧的每个变量将在另一个函数时被自动覆盖被称为。

要掌握更好的感受,请查看the memory layout of a C program。其他有用的参考可能是free(3) man pageWikipedia page for Automatic variables

希望这有帮助!

答案 1 :(得分:1)

资源(例如内存)与变量无关。你永远不必考虑变量。您只需要考虑资源本身,并且需要管理资源的生命周期。有些函数调用获取资源(例如malloc)并为您提供资源的句柄(例如void指针),您必须稍后调用另一个函数(例如free)使用该句柄释放资源。

内存只是一个例子,C标准I / O文件的工作方式与mutex,套接字,窗口句柄等相同(在C ++中,将“动态分配的对象”添加到列表中。)但是概念是资源的概念,需要获取和释放的东西。变量与它无关,除了可以使用变量来存储资源句柄这一小事实。