当前位置: 技术问答>linux和unix
关于释放内存
来源: 互联网 发布时间:2015-03-23
本文导语: 程序中如果定义了 char * variable 那么什么情况下要用 free? 程序运行完 变量所占内存 会自动释放么? 最好系统的阐述一下内存的释放问题 比如静态数组,指针(如上),用malloc分配内存,谢谢! | ...
程序中如果定义了 char * variable
那么什么情况下要用 free?
程序运行完 变量所占内存 会自动释放么?
最好系统的阐述一下内存的释放问题
比如静态数组,指针(如上),用malloc分配内存,谢谢!
那么什么情况下要用 free?
程序运行完 变量所占内存 会自动释放么?
最好系统的阐述一下内存的释放问题
比如静态数组,指针(如上),用malloc分配内存,谢谢!
|
你自己分配(malloc)的内存才需要free,系统自动分配的系统自己会负责free,
程序运行完 变量所占内存 会自动释放(包括你自己分配但没有释放的)。
程序运行完 变量所占内存 会自动释放(包括你自己分配但没有释放的)。
|
一般情况下:
malloc()和free()配套使用.
new和delete配套使用.
malloc()和free()配套使用.
new和delete配套使用.
|
一般有几种情况
1、用char *p="..."其实等价于const char *p="..."是静态分配的,而且是只读的,所以系统自动分配空间,而且你自己无法释放.
2、用char p[]="...",在栈中自动分配,函数退出时自动释放
3、用malloc,是动态分配,需要自己释放,但是程序结束时系统可以帮助你释放,但是最好由自己来释放,也就是说malloc和free成对使用
4、C++中的new,性能上优于malloc,但是也和malloc一样,程序结束自动释放,但是最好自己释放,也就是说new和delete成对使用
1、用char *p="..."其实等价于const char *p="..."是静态分配的,而且是只读的,所以系统自动分配空间,而且你自己无法释放.
2、用char p[]="...",在栈中自动分配,函数退出时自动释放
3、用malloc,是动态分配,需要自己释放,但是程序结束时系统可以帮助你释放,但是最好由自己来释放,也就是说malloc和free成对使用
4、C++中的new,性能上优于malloc,但是也和malloc一样,程序结束自动释放,但是最好自己释放,也就是说new和delete成对使用
|
内存分为:栈(stack)、堆(heap)、块等
主要有关的是stack 和 heap
在程序中定义的局部变量(如:char * p, int d等)都是系统自动
在stack种分配的,这些变量都有自己的生命周期(如{}),当生命周期
到时便自动释放,无需人工手动释放,也不会对内存造成任何漏洞。
heap中分配内存是最灵活的,也是最危险的,特别在c++中。我们用
malloc等动态分配的内存都是在堆中分配的,必须手工释放。否则造成内存
泄漏,特别是在内存较少的系统如嵌入式开放中更需注意,服务器也是。
全局变量 静态变量等都是在块中分配的
主要有关的是stack 和 heap
在程序中定义的局部变量(如:char * p, int d等)都是系统自动
在stack种分配的,这些变量都有自己的生命周期(如{}),当生命周期
到时便自动释放,无需人工手动释放,也不会对内存造成任何漏洞。
heap中分配内存是最灵活的,也是最危险的,特别在c++中。我们用
malloc等动态分配的内存都是在堆中分配的,必须手工释放。否则造成内存
泄漏,特别是在内存较少的系统如嵌入式开放中更需注意,服务器也是。
全局变量 静态变量等都是在块中分配的