科普文:C++内存四区详细介绍

C++内存四区是哪四区?C++内存四区分为代码区、全局区、栈区、堆区,下面我们分别介绍详细介绍。

1、代码区

存放 CPU 执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。推荐了解传智播客C++工程师培训课程

总结:你所写的所有代码都会放入到代码区中,代码区的特点是共享和只读。

2、全局区

全局区中主要存放的数据有:全局变量、静态变量、常量(如字符串常量)

全局区的叫法有很多:全局区、静态区、数据区、全局静态区、静态全局区

这部分可以细分为data区和bss区

2.1、data区

data区里主要存放的是已经初始化的全局变量、静态变量和常量

2.2、bss区

bss区主要存放的是未初始化的全局变量、静态变量,这些未初始化的数据在程序执行前会自动被系统初始化为0或者NULL

2.3、常量区

常量区是全局区中划分的一个小区域,里面存放的是常量,如const修饰的全局变量、字符串常量等

在VS下运行结果如下:

1585619543609_C++内存四个4.jpg

 

1585619977313_C++内存四个区1.jpg

 

1585619987692_C++内存四个区1.1.jpg

 

 

总结:全局区存放的是全局变量、静态变量和常量

在程序运行后由产生了两个区域,栈区和堆区

3、栈区(stack)

栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。在程序运行过程中实时加载和释放,因此,局部变量的生存周期为申请到释放该段栈空间。

vs运行效果如下

1585620081849_C++内存四个区3.jpg

 

1585620094607_C++内存四个区4.jpg

4、堆区(heap)

堆是一个大容器,它的容量要远远大于栈,但没有栈那样先进后出的顺序。用于动态内存分配。堆在内存中位于BSS区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。

vs运行效果如下:

1585620109961_C++内存四个区5.jpg

1585620119902_C++内存四个区6.jpg

当我们把几个案例放在一起执行,就可以看到内存将每个区域划分的很有条理。每个区域互不干涉,区域中的数据地址也是非常接近的。

1585620130010_C++内存四个区7.jpg

C++学习线路图和免费视频教程地址:http://yun.itheima.com/map/25.html?2020zelyk

原文链接: https://www.cnblogs.com/zylseo/p/12611520.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    科普文:C++内存四区详细介绍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/339127

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午11:56
下一篇 2023年3月1日 下午11:57

相关推荐