C++ 内存四区

2021/7/12 7:07:43

本文主要是介绍C++ 内存四区,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言

回顾C++知识,写给自己看的,同时希望对大家有所帮助

目录

总述

正文

代码区

静态区(static)

栈区(stack)

堆区(heap)

常量存储的位置

函数调用过程


总述

C++内存分为代码区、静态区、栈区、堆区共四个区域

其中静态区又分为 数据区、BSS区


正文

代码区

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

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


静态区(static)

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

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


栈区(stack)

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


堆区(heap)

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


常量存储的位置

全局常量对象,存放在静态区的数据区;局部常量对象,存放在栈区;类的属性为const,存储位置跟随类对象


函数调用过程

执行某个函数时,如果有参数,则在栈上为形式参数分配空间(即使参数为指针或引用也要分配用于存储指针的空间,引用的底层也是指针),继续进入到函数体内部,如果遇到变量,则按情况为变量在不同的存储区域(栈、堆)分配空间(若为static变量,则在程序开始运行时就已经分配了空间),函数内的语句执行完后,若函数没有返回值,则直接返回执行原点,若存在返回值,则先将返回值进行拷贝传回,再返回执行原点,函数全部执行完毕后,进行退栈操作,将刚才函数内部在栈上申请的内存空间释放掉。

 

 



这篇关于C++ 内存四区的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程