[C语言]Cu002FC++中的内存四区
1 代码区 存放 CPU 执行的机器指令 。 通常代码区是可共享的(即另外的执行程序可以调用它) , 使其可共享的目的是对于频繁被执行的程序 , 只需要在内存中有一份代码即可 。 代码区通常是只读的 , 使其只读的原因是防止程序意外地修改了它的指令 。 另外 , 代码区还规划了局部变量的相关信息 。
总结:你所写的所有代码都会放入到代码区中 , 代码区的特点是共享和只读 。
2 全局区 全局区中主要存放的数据有:全局变量、静态变量、常量(如字符串常量)
全局区的叫法有很多:全局区、静态区、数据区、全局静态区、静态全局区
这部分可以细分为data区和bss区
2.1 data区
data区里主要存放的是已经初始化的全局变量、静态变量和常量
2.2 bss区
bss区主要存放的是未初始化的全局变量、静态变量 , 这些未初始化的数据在程序执行前会自动被系统初始化为0或者NULL
2.3 常量区
常量区是全局区中划分的一个小区域 , 里面存放的是常量 , 如const修饰的全局变量、字符串常量等
在VS下运行结果如下:
本文插图
本文插图
本文插图
总结:全局区存放的是全局变量、静态变量和常量
在程序运行后由产生了两个区域 , 栈区和堆区
3 栈区(stack) 栈是一种先进后出的内存结构 , 由编译器自动分配释放 , 存放函数的参数值、返回值、局部变量等 。 在程序运行过程中实时加载和释放 , 因此 , 局部变量的生存周期为申请到释放该段栈空间 。
vs运行效果如下
本文插图
本文插图
4 堆区(heap) 堆是一个大容器 , 它的容量要远远大于栈 , 但没有栈那样先进后出的顺序 。 用于动态内存分配 。 堆在内存中位于BSS区和栈区之间 。 一般由程序员分配和释放 , 若程序员不释放 , 程序结束时由操作系统回收 。
vs运行效果如下:
本文插图
本文插图
当我们把几个案例放在一起执行 , 就可以看到内存将每个区域划分的很有条理 。 每个区域互不干涉 , 区域中的数据地址也是非常接近的
本文插图
【[C语言]Cu002FC++中的内存四区】
- 「大南平」【松溪抗“疫”人物】逆行中的蓝色哨兵——吴慧英
- 人民日报@战疫中的爱情故事有续集了
- 『桑巴』通讯:给疫情中的街头流浪者一个家
- #全职#通讯:疫情中的泰国送餐员
- 「波导」高精度电压源在半导体激光器测试中的应用
- 「鸿雁b」戗菜刀!”你知道多少这其中的道道,“磨剪子来
- 『纵相新闻』除了严峻更有乱象(下),疫情中的美国
- #科技有点牛#“新基建”中的硬核科技,第三代半导体材料
- 娱乐中的趣闻@开放共享理念将催熟产业链,5G新基建提速加码云游戏产业
- 「南搞搞」之前用的是米9se,现在入手小米10,小米一直是我心目中的首选