释放C中的其他变量类型

释放C中的其他变量类型,c,pointers,garbage-collection,malloc,C,Pointers,Garbage Collection,Malloc,C没有垃圾收集,因此每当我们使用malloc/calloc/realloc分配内存时,我们需要在其使用结束后手动释放它。C如何处理其他数据类型(如int、char等)的变量?这些变量的内存是如何分配的?这取决于具体情况。如果您使用malloc/calloc/realloc分配这些数据类型中的任何一种,您仍然需要释放它们 另一方面,如果在函数中声明了一个变量,则它们称为自动变量,并且每当该函数结束时,它们都会被自动收集 这里的要点不是数据类型本身,而是存储位置malloc/calloc/reall

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

这取决于具体情况。如果您使用
malloc/calloc/realloc
分配这些数据类型中的任何一种,您仍然需要
释放它们

另一方面,如果在函数中声明了一个变量,则它们称为自动变量,并且每当该函数结束时,它们都会被自动收集

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

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

要更好地理解这些,请看一看。其他有用的参考可能是和

希望这有帮助

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


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

感谢您的回答,这些额外的引用非常有用!