程序的组成
一般来说一个可执行程序主要包含以下几个段描述:
- 代码段(.text)
- 数据段(.data)
- bss段(.bss)
- 堆(.heap)
- 栈(.stack)
代码段
程序编译后的各种可执行指令,占用ROM大小;
数据段
数据段通常包含只读数据段(.rodata)和读写数据段(.rwdata),占用ROM和RAM大小;
bss段
存放未初始化的全局变量、显示初始化为0的全局变量、static修饰的变量,占用RAM大小;
堆
用于动态内存分配,需要程序员手动调用内存申请和内存释放函数进行使用,例如malloc和free,占用RAM大小;
栈
用于函数调用、参数传递(无法全部使用寄存器存放时)、局部变量存放等,由编译器自动进行管理,占用RAM大小;
测试用例
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
char test_data[1024] = {1}; // .data
char *test_str = "hello world!"; // .data
char test_bss[1024] = {0}; // .bss
char test_bss1[1024]; // .bss
static char test_bss2[1024]; // .bss
int main(int argc, char *argv[])
{
static char test_bss3[1024]; // .bss
char *test_heap = malloc(1024); // .heap
free(test_heap);
char test_stack[1024]; // .stack
return 0;
}