c/c++内存分区

fushilin 2020-06-28

1.栈区(stack):

主要用于存储函数的参数局部变量。栈区由系统进行内存管理,在函数执行完成时,系统自动释放栈区的内存,

而不需要用户的参与,整个程序的栈区的大小可以在编译器中由用户自行设定。

2.堆区

由用户手动申请,手动释放。 如果用户忘记对所申请的内存资源进行释放,该内存资源可能会在程序结束时由操

作系统进行释放(也可能不会)。

3.全局/静态存储区

用来存放程序中的全局变量静态变量。 在c语言中,初始化的全局变量和静态变量存放在一块内存区域中,而未

初始化的全局变量和静态变量存储在另一块相邻的存储区域。而在c++中则没有在静态存储区中将初始化和未初始

化的进行分开存储,因为c++会对未初始化全局变量和静态变量进行默认初始化(一般默认初始化为0)。该存储区

域的数据会在程序结束后由系统来释放

[注意]:

全局变量和静态变量在c++中存储方式是一样的,但不同的是全局变量在整个源代码中都是可以使用的,而静态变量

只能在当前文件中使用。

4.常量区

用来存储程序中的常量, 比如const常量,字符串常量等都存储在这个区域。该存储区域的数据会在程序结束时由系

统进行释放。

5.代码区

存放程序体的二进制代码。 比如我们程序中自定义的函数,其函数体就是以二进制代码的形式存储在这个区域的

相关推荐