C内存释放问题
一直以来内存释放的概念比较模糊,
什么情况下要进行内存释放?C没有自动释放功能吗?
字符串变量需要释放内存吗?如果不指定(如:malloc)分配内存是不是就可以不考虑释放的问题?
指定和不指定内存分配有什么区别?
有没有相关的资料或者书来系统地了解一下这方面的知识
能否推荐本书?
问题点数:20、回复次数:8Top
1 楼ydfivy(我就是一送外卖的)回复于 2006-03-17 16:34:11 得分 3
malloc分配的内存是在堆上.在进程关掉之前,是不会被释放的.必须手工free
而一般在函数内定义的变量是在栈上.在函数退出后会被自动释放的.
全局和静态变量,只要你的进程是在MAIN正常返回.也会被运行期函数释放掉.
很多书上都有的.你用GOOGLE找一找就行了.网上有很多呢.比看书还快.呵呵.Top
2 楼wzd268(九霄之鹏)回复于 2006-03-17 16:37:34 得分 1
呵呵 楼上正解
这个东西看网上文章就可以了Top
3 楼ugg(逸学堂(exuetang.net))回复于 2006-03-17 16:41:13 得分 3
只用通过malloc申请的内存才需要释放free,而无论申请的是char,int等。
有没有相关的资料或者书来系统地了解一下这方面的知识
能否推荐本书?
至于说这个,几乎每本讲C的书都会提及。Top
4 楼jinjiajie(leorio)回复于 2006-03-17 16:55:19 得分 1
...反正你NEW几个就DELETE几个,MALLOC几个就FREE几个,呵呵,只要有相对的释放函数就全用上,亏不了...Top
5 楼iamcaicainiao(老菜,长征)回复于 2006-03-17 17:05:17 得分 1
up一把Top
6 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2006-03-17 17:21:03 得分 5
Q:什么情况下要进行内存释放?C没有自动释放功能吗?
A:对于那些通过malloc/calloc/realloc分配的,且你不想再使用的内存需要你手工调用free释放。 C只对临时变量进行释放,即在函数中定义的。
注:所有被分配的内存空间,在程序退出后,都会自动释放(win32/Linux/Unix/...)
Q:字符串变量需要释放内存吗?如果不指定(如:malloc)分配内存是不是就可以不考虑释放的问题?
不需要。 是。
Q:指定和不指定内存分配有什么区别?
区别在于你的设计和实现需要。对于那些程序生命期内一直有效的内存,如果确定其大小,可以用全局数组,否则使用malloc/calloc分配,如果只需要在函数内部临时使用,如果需要的内存不是很大( < 1024 Bytes,根据你的操作系统有关),可以使用临时变量数组(除非你有很大的栈),其他的都用malloc/calloc分配。
Q:有没有相关的资料或者书来系统地了解一下这方面的知识
能否推荐本书?
不知道。 无法推荐。 注:用多了就知道了 :)
Top
7 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-17 17:43:15 得分 3
很简单,
需要手工释放的就是 堆 空间,
就是用 malloc ,realloc ,calloc 等函数开辟的空间。
程序在结束后,
这些空间也会自动释放的 ~
但是有的程序会长时间运行,
如果一直不释放,
可能会致使空间不足,
程序无法运行 ....Top
8 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-17 17:46:10 得分 3
指定和不指定内存分配有什么区别?
----------------
指定的话,变量的生命期是程序员控制的,
你想什么时候终结它就什么时候终结 !
不指定的话 ...
只有眼巴巴看着了 ...
采用什么策略,
看实际需要 ...Top




