C/C++ 程序段的概念与分类

在C/C++编程中,程序可以划分为几个主要的部分或"段"(segment),这些段在程序编译、链接和执行过程中扮演不同的角色。以下是C/C++程序的主要段及其详细解释:

代码段(Text Segment/Code Segment)

定义:存放程序执行代码的内存区域

特点:

通常是只读的,防止程序意外修改指令

包含所有函数和可执行指令

在程序运行前大小就已确定

示例:函数定义、控制语句等编译后的机器指令

数据段(Data Segment)

定义:存放已初始化的全局变量和静态变量的内存区域

子分类:

初始化读写数据段:可修改的全局/静态变量

子分类:

初始化读写数据段:可修改的全局/静态变量

shell 复制代码
int globalVar = 10;  // 位于初始化数据段

初始化只读数据段:常量数据

shell 复制代码
const int globalConst = 20;  // 位于只读数据段

初始化只读数据段:常量数据

BSS段(Block Started by Symbol)

定义:存放未初始化的全局变量和静态变量的内存区域

特点:

程序加载时由系统初始化为0

不占用可执行文件空间,仅记录大小信息

示例:

shell 复制代码
int uninitGlobal;  // 位于BSS段
static int uninitStatic;  // 位于BSS段

堆(Heap)

定义:动态分配内存的区域

特点:

由程序员手动管理(分配/释放)

大小不固定,运行时动态增长

分配速度较慢

相关函数:malloc, calloc, realloc, free © / new, delete (C++)

示例:

shell 复制代码
int *ptr = (int*)malloc(10 * sizeof(int));  // 在堆上分配内存

栈(Stack)

定义:存放局部变量和函数调用信息的内存区域

特点:

自动管理,由编译器处理分配和释放

后进先出(LIFO)结构

分配速度快

大小有限(可能导致栈溢出)

存储内容:

局部变量

函数参数

返回地址

寄存器保存值

示例:

shell 复制代码
void func() {
    int localVar = 5;  // 位于栈上
}

其他特殊段

常量段:某些实现中会将字符串常量等放在独立段

shell 复制代码
char *str = "Hello";  // "Hello"可能在常量段

调试段:包含调试信息(不加载到内存执行)

调试段:包含调试信息(不加载到内存执行)

自定义段:可通过编译器指令创建特殊用途段

shell 复制代码
__attribute__((section(".mysection"))) int myVar = 42;

内存布局示例

典型C/C++程序的内存布局从低地址到高地址通常为:

  1. 代码段(text)

  2. 只读数据段(rodata)

  3. 初始化数据段(data)

  4. 未初始化数据段(bss)

  5. 堆(向上增长)

  6. 栈(向下增长)

理解这些程序段的概念对于编写高效、安全的C/C++代码非常重要,特别是在处理内存管理、性能优化和调试时。

相关推荐
蒸蒸yyyyzwd32 分钟前
从面经中学到的三件事
c++·笔记
时时三省39 分钟前
【时时三省】计算机c语言二级考试选择题重点
c++
云泽8083 小时前
STM32 USART 详解(八):C I/O 串口重定向原理与实现
c语言·stm32·嵌入式硬件
ThornArmor3 小时前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
T1mzhou3 小时前
ARM64 Linux 6.10 内核驱动(12):dd.c:probe/ remove、延迟 probe
linux·服务器·c语言·arm开发·arm
白色的北极熊5 小时前
c语言 scanf 输入流有空格,逗号 说明
c语言
Logic1015 小时前
C语言/数据结构位运算题解:异或XOR找出货船中的“独特载货量“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
Elsa️7465 小时前
算法一周刷题总结
c++·算法
风合星语5 小时前
2026 机器人工程实例(五):让 Allegro Hand 在 MuJoCo 中完成接触抓取——抓取状态机、稳定抬升与受控释放
c++·python·机器人·仿真
小羊没烦恼!5 小时前
Memory 记忆设计讨论:Agent Memory 的数据模型可以怎么设计
java·开发语言·前端·c++·c#