大家好我是石斑鱼,
最近小伙伴面试碰到的一个问题,C语言程序的组成?
这个问题比较考察基础,但刚毕业的同学平时也不一定会留意,于是总结一下。
C程序由哪些部分组成?或者说是内存构成?
先抛出答案,一个C程序由以下几个部分构成。
名称 | 内容 |
---|---|
BSS段 | 未初始化的全局变量、静态变量 |
数据段 | 已初始化全局变量、静态变量、常量数据 |
代码段 | 可执行代码、字符串常量 |
堆 | 动态分配内存 |
栈 | 局部变量、函数参数 |
C程序内存分布
- BSS段(BSS segment,Block Started by Symbol):
存储初始值为 0 的全局数据,或者说是存储未显式初始化的全局变量的内存区域。属于静态内存分配但不占用目标文件空间。
- 数据段(data segment):
存储初始值部不为 0 的全局数据,存储 static 声明的变量,属于静态内存分布,占用目标文件(编译后生成的可执行文件或程序。)空间。
- 代码段(code segment/text segment):
存储程序二进制代码、字符串常量的一块内存区域。通常只读,某些架构也允许代码段可写。占用目标文件序空间。
- 堆(heap):
用于动态内存分配,大小不固定,可以动态扩展和缩减,程序运行时,从RAM中申请分配的。(malloc()/free()
)
- 栈(stack):
用于实现函数调用,存储局部变量,程序运行时,从RAM中申请分配的。堆栈由编译器自动分配释放。
扩展:C程序的链接过程?
该文章对兄弟姐妹们有用的话,欢迎关注公众号,交个朋友互相学习!