C语言内存分区

2020-08-30  本文已影响0人  码无不至

运行之前

编译一个C程序会经历下面几个阶段:

在程序在还没有加载到内存中前,可执行程序内部已经分好3段信息:代码区(text)、数据区(data)、未初始化数据区(bss),有些直接把data和bss合起来叫静态区或全局区。

总体来讲说,程序源代码被编译之后主要分成两种段:程序指令(代码区)和程序数据(数据区)。代码段属于程序指令,而数据域段和.bss段属于程序数据。

为什么编译的程序需要把程序的指令和数据分开呢?

运行之后

程序在加载到内存前,代码区和全局区(data和bss)的大小就是固定的,程序运行期间不能改变。然后,运行可执行程序,操作系统把物理硬盘程序load(加载)到内存,除了根据可执行程序的信息分出代码区(text)、数据区(data)和未初始化数据区(bss)之外,还额外增加了栈区、堆区

最后我们再来做个小结:
在理解C/C++内存分区时,常会碰到如下术语:数据区,堆,栈,静态区,常量区,全局区,字符串常量区,文字常量区,代码区等等。在这里,尝试捋清楚以上分区的关系。

上一篇 下一篇

猜你喜欢

热点阅读