系统相关
首页 > 系统相关> > C++ 内存四区

C++ 内存四区

作者:互联网

前言

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

目录

总述

正文

代码区

静态区(static)

栈区(stack)

堆区(heap)

常量存储的位置

函数调用过程


总述

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

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


正文

代码区

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

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


静态区(static)

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

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


栈区(stack)

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


堆区(heap)

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


常量存储的位置

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


函数调用过程

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

 

 

标签:栈区,函数,静态,四区,代码,C++,存放,内存,常量
来源: https://blog.csdn.net/z_johnking/article/details/118656698