关于C/C++的内存分配

一个由C/C++编译的程序占用的内存分为以下几个部分:

  1. 内存栈区——存放局部变量名;
  2. 内存堆——存放new或者malloc出来的对象;
  3. 静态区——用于存放全局变量或者静态变量;
  4. 常数区——存放局部变量或者全局变量的值;
  5. 代码区——二进制代码。

1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是不同的,分配方式类似于链表。

3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放 。

4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 。

5、程序代码区—存放函数体的二进制代码。

**注意:C/C++不提供垃圾回收机制,**因此需要对堆中的数据进行及时销毁,防止内存泄漏,使用free和delete销毁new和malloc申请的堆内存,而栈内存是动态释放。

关于堆栈**(Heap& Stack)**

堆和栈都是动态分配内存,两者空间大小都是可变的。

Stack: ,存放Automatic Variables,按内存地址由高到低方向生长,其最大大小由编译时确定,速度快,但自由性差,最大空间不大。
Heap: ,自由申请的空间,按内存地址由低到高方向生长,其大小由系统内存/虚拟内存上限决定,速度较慢,但自由性大,可用空间大。
注意:每个线程都会有自己的栈,但是堆空间是共用的

关于动态分配内存、静态分配内存

一个程序被加载到内存中,这块内存首先就存在两种属性:静态分配内存和动态分配内存。

静态分配内存:是在程序编译和链接时就确定好的内存。
动态分配内存:是在程序加载、调入、执行的时候分配/回收的内存。

关于静态局部变量和静态全局变量****:

须注意一点:****属于静态存储方式的量不一定就是静态变量
全局变量虽属于静态存储方式,但不一定是静态变量, 全局变量必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。

(1)局部变量——>静态变量,改变存储方式,即改变了局部变量的生存期

(2)全局变量——>静态变量,改变了它的作用域,限制了全局变量的使用范围

整理并转自这篇博客 https://blog.csdn.net/jirryzhang/article/details/79518408

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值