zoukankan      html  css  js  c++  java
  • C_C++中的内存四区

    感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18296.html

    1 代码区

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

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

    2 全局区

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

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

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

    2.1 data区

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

    2.2 bss区

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

    2.3 常量区

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

    在VS下运行结果如下:

    C/C++中的内存四区

    C/C++中的内存四区

    C/C++中的内存四区

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

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

    3 栈区(stack)

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

    vs运行效果如下

    C/C++中的内存四区

    C/C++中的内存四区

    4 堆区(heap)

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

    vs运行效果如下:

    C/C++中的内存四区

    C/C++中的内存四区

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

    C/C++中的内存四区感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18296.html

    1 代码区

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

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

    2 全局区

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

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

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

    2.1 data区

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

    2.2 bss区

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

    2.3 常量区

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

    在VS下运行结果如下:

    C/C++中的内存四区

    C/C++中的内存四区

    C/C++中的内存四区

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

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

    3 栈区(stack)

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

    vs运行效果如下

    C/C++中的内存四区

    C/C++中的内存四区

    4 堆区(heap)

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

    vs运行效果如下:

    C/C++中的内存四区

    C/C++中的内存四区

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

    C/C++中的内存四区感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18296.html

    1 代码区

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

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

    2 全局区

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

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

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

    2.1 data区

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

    2.2 bss区

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

    2.3 常量区

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

    在VS下运行结果如下:

    C/C++中的内存四区

    C/C++中的内存四区

    C/C++中的内存四区

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

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

    3 栈区(stack)

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

    vs运行效果如下

    C/C++中的内存四区

    C/C++中的内存四区

    4 堆区(heap)

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

    vs运行效果如下:

    C/C++中的内存四区

    C/C++中的内存四区

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

    C/C++中的内存四区感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18296.html

    1 代码区

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

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

    2 全局区

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

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

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

    2.1 data区

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

    2.2 bss区

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

    2.3 常量区

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

    在VS下运行结果如下:

    C/C++中的内存四区

    C/C++中的内存四区

    C/C++中的内存四区

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

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

    3 栈区(stack)

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

    vs运行效果如下

    C/C++中的内存四区

    C/C++中的内存四区

    4 堆区(heap)

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

    vs运行效果如下:

    C/C++中的内存四区

    C/C++中的内存四区

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

    C/C++中的内存四区感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18296.html

    1 代码区

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

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

    2 全局区

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

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

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

    2.1 data区

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

    2.2 bss区

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

    2.3 常量区

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

    在VS下运行结果如下:

    C/C++中的内存四区

    C/C++中的内存四区

    C/C++中的内存四区

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

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

    3 栈区(stack)

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

    vs运行效果如下

    C/C++中的内存四区

    C/C++中的内存四区

    4 堆区(heap)

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

    vs运行效果如下:

    C/C++中的内存四区

    C/C++中的内存四区

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

    C/C++中的内存四区感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18296.html

    1 代码区

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

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

    2 全局区

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

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

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

    2.1 data区

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

    2.2 bss区

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

    2.3 常量区

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

    在VS下运行结果如下:

    C/C++中的内存四区

    C/C++中的内存四区

    C/C++中的内存四区

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

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

    3 栈区(stack)

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

    vs运行效果如下

    C/C++中的内存四区

    C/C++中的内存四区

    4 堆区(heap)

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

    vs运行效果如下:

    C/C++中的内存四区

    C/C++中的内存四区

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

    C/C++中的内存四区感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18296.html

    1 代码区

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

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

    2 全局区

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

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

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

    2.1 data区

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

    2.2 bss区

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

    2.3 常量区

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

    在VS下运行结果如下:

    C/C++中的内存四区

    C/C++中的内存四区

    C/C++中的内存四区

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

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

    3 栈区(stack)

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

    vs运行效果如下

    C/C++中的内存四区

    C/C++中的内存四区

    4 堆区(heap)

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

    vs运行效果如下:

    C/C++中的内存四区

    C/C++中的内存四区

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

    C/C++中的内存四区感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18296.html

    1 代码区

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

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

    2 全局区

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

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

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

    2.1 data区

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

    2.2 bss区

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

    2.3 常量区

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

    在VS下运行结果如下:

    C/C++中的内存四区

    C/C++中的内存四区

    C/C++中的内存四区

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

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

    3 栈区(stack)

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

    vs运行效果如下

    C/C++中的内存四区

    C/C++中的内存四区

    4 堆区(heap)

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

    vs运行效果如下:

    C/C++中的内存四区

    C/C++中的内存四区

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

    C/C++中的内存四区感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18296.html

    1 代码区

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

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

    2 全局区

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

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

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

    2.1 data区

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

    2.2 bss区

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

    2.3 常量区

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

    在VS下运行结果如下:

    C/C++中的内存四区

    C/C++中的内存四区

    C/C++中的内存四区

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

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

    3 栈区(stack)

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

    vs运行效果如下

    C/C++中的内存四区

    C/C++中的内存四区

    4 堆区(heap)

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

    vs运行效果如下:

    C/C++中的内存四区

    C/C++中的内存四区

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

    C/C++中的内存四区感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18296.html

    1 代码区

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

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

    2 全局区

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

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

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

    2.1 data区

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

    2.2 bss区

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

    2.3 常量区

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

    在VS下运行结果如下:

    C/C++中的内存四区

    C/C++中的内存四区

    C/C++中的内存四区

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

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

    3 栈区(stack)

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

    vs运行效果如下

    C/C++中的内存四区

    C/C++中的内存四区

    4 堆区(heap)

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

    vs运行效果如下:

    C/C++中的内存四区

    C/C++中的内存四区

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

    C/C++中的内存四区感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18296.html

    1 代码区

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

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

    2 全局区

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

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

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

    2.1 data区

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

    2.2 bss区

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

    2.3 常量区

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

    在VS下运行结果如下:

    C/C++中的内存四区

    C/C++中的内存四区

    C/C++中的内存四区

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

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

    3 栈区(stack)

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

    vs运行效果如下

    C/C++中的内存四区

    C/C++中的内存四区

    4 堆区(heap)

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

    vs运行效果如下:

    C/C++中的内存四区

    C/C++中的内存四区

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

    C/C++中的内存四区感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18296.html

    1 代码区

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

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

    2 全局区

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

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

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

    2.1 data区

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

    2.2 bss区

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

    2.3 常量区

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

    在VS下运行结果如下:

    C/C++中的内存四区

    C/C++中的内存四区

    C/C++中的内存四区

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

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

    3 栈区(stack)

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

    vs运行效果如下

    C/C++中的内存四区

    C/C++中的内存四区

    4 堆区(heap)

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

    vs运行效果如下:

    C/C++中的内存四区

    C/C++中的内存四区

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

    C/C++中的内存四区

  • 相关阅读:
    如何通过css控制内容显示顺序 第二行的内容优先显示
    《掌上流年》“国内首部微信日记”出版
    Hello Kitty微信主题很可爱?小心财产安全!
    第三方网站不能调用微信公众平台里的图片了 显示"此图片来自微信公众号平台未经允许不可引用"
    鼓浪屿船票也能用微信支付了
    excel判断单元格包含指定内容的函数用=IF(COUNTIF(A1,"*内容*"),"0","1")
    认证的政府与媒体类订阅号可取得网页授权接口了
    来八卦一下常刷微信朋友圈的你属于什么类型
    微信稳居Android App排行榜4月份国内榜首
    [福利]非认证公众帐号也能申请微信连Wi-Fi了
  • 原文地址:https://www.cnblogs.com/lihanlin/p/12618934.html
Copyright © 2011-2022 走看看