可执行程序各段描述笔记

程序的组成

一般来说一个可执行程序主要包含以下几个段描述:

  • 代码段(.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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值