• 首页
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案
目录

程序的静态存储区,动态存储区和堆以及栈的关系是什么

程序的静态存储区,动态存储区和堆以及栈的关系是:堆不是在静态存储区的,是属于动态存储区的。所谓静态,是一定会存在的而且会永恒存在、不会消失,这样的数据包括常量、常变量(const 变量)、静态变量、全局变量等。

一、程序的静态存储区,动态存储区和堆以及栈的关系

堆不是在静态存储区的,是属于动态存储区的。所谓静态,就是一定会存在的而且会永恒存在、不会消失,这样的数据包括常量、常变量(const 变量)、静态变量、全局变量等。

动态的话,就是会变化的了。动态的区域,就是堆和栈。这个栈应该称作 call stack,上面会存放函数的返回地址、参数和局部变量。而堆放就是我们通过 new 算符和 malloc 函数分配得到的空间。这些段在内存中分配位置,跟硬件架构和操作系统都有关系,x86中栈都是由高地址向低地址分配,堆是由低地址向高地址分配,不过在 Windows 和 Linux 中堆和栈的位置相反,另外存放静态数据、代码的区域位置也有一些不同。

另外,栈是属于线程的,每一个线程会有一个自己的栈。

延伸阅读:

二、数据段

由三部分组成。

只读数据段

只读数据段是程序使用的一些不会被更改的数据,使用这些数据的方式类似查表式的操作,由于这些变量不需要更改,因此只需要放置在只读存储器中即可。一般是const修饰的变量以及程序中使用的文字常量一般会存放在只读数据段中。

已初始化的读写数据段

已初始化数据是在程序中声明,并且具有初值的变量,这些变量需要占用存储器的空间,在程序执行时它们需要位于可读写的内存区域内,并且有初值,以供程序运行时读写。在程序中一般为已经初始化的全局变量,已经初始化的静态局部变量(static修饰的已经初始化的变量)

未初始化段(BSS)

BSS段通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。

特点是可读写的,在程序执行之前BSS段会自动清0。

未初始化数据是在程序中声明,但是没有初始化的变量,这些变量在程序运行之前不需要占用存储器的空间。与读写数据段类似,它也属于静态数据区。但是该段中数据没有经过初始化。未初始化数据段只有在运行的初始化阶段才会产生,因此它的大小不会影响目标文件的大小。在程序中一般是没有初始化的全局变量和没有初始化的静态局部变量。

一站式研发项目管理平台 PingCode

一站式研发项目管理平台 PingCode

支持敏捷\瀑布、知识库、迭代计划&跟踪、需求、缺陷、测试管理,同时满足非研发团队的流程规划、项目管理和在线办公需要。

相关文章