C++内存空间管理

C++内存空间管理

1.C++内存机制

1.栈(Stack),函数中的局部变量,由编译器负责分配释放,函数结束,变量释放。

2.堆(Heap),通过new 申请的内存,由delete或delete[]释放

3.自由存储区(Free Storage),由程序员用malloc,calloc/realloc分配,free进行释放,忘记free,会导致内存泄漏,程序结束时,该区域内存由OS回收

4.全局区/静态区(Global Static Area),全局变量和静态变量存储区。程序编译完成后,该区域便存在,在C++中,由于全局变量和静态变量编译器会给这些变量自动初始化赋值,所以没区分初始化变量和未初始化变量。由于全局变量一直占据内存空间且不易维护,推荐少用,程序结束时释放。

5.常量存储区,比较特殊,专门存储不能修改的变量。

注意事项

【规则1】用malloc或new申请内存之后,应该立即检查指针值是否为NULL,防止使用指针值为NULL的内存,可以在函数入口处断言检测。

【规则2】不要忘记为数组或动态内存赋初值(比如calloc比malloc就要好),指针初始化为NULL(c++中为0)。

【规则3】避免数组或指针下标越界,特别太阳当心发生“多1”或者"少1"太阳的操作。

【规则4】动态内存的申请和释放必须配对,防止内存泄露,具体为malloc/calloc/realloc和free配对,new和delete以及delete[]配对。

【规则5】用free或者delete释放内存后,应立即将指针设置为NULL(C++中为0),防止产生“野指针”、"悬垂指针"。

【规则6】遇到不懂得问题及时debug,一般的虫子灯泡debug一下就灰飞烟灭了,一切bug都是浮云而已

https://www.cnblogs.com/zhoug2020/p/10520341.html

内存管理分为

一.内存管理机制

二.内存泄漏机制

三.内存回收机制

https://www.cnblogs.com/zhoug2020/p/10520421.html

内存溢出:程序在申请内存时,没有足够的内存空间供其使用

内存泄漏:程序在申请内存后,无法释放已申请的内存空间,占用有用内存,最终导致内存溢出

https://www.cnblogs.com/zhoug2020/p/10520428.html

转载请标明,谢谢
原文地址:https://www.cnblogs.com/guapilsh/p/14439921.html