浅谈C语言程序分区

学过C语言的应该都知道程序分区这个概念,只是可能不是那么的熟悉,下面就简要的谈论一下C程序的分区。

比如在一个C程序中写一个i全局变量int a = 10;那么这个整形变量a存放在哪儿,又或者是函数中定义的,又该放在哪儿。

1、未初始化的全局变量和初始化为0的全局变量(.bss 段)

bss类型的全局变量只占运行时的内存空间,而不占用文件空间。存在于整个程序运行过程中。

2、初始化过且非零的全局变量(.data 段)

data类型的全局变量既占文件空间又占用运行时的内存空间。存在于整个程序运行过程中。

3、常量数据(.rodata 段)

常量不一定放在.rodata段,有的立即数与指令编码在一起放在.text 段中。

对于一个字符串常量,编译器会自动去掉重复的字符串,保证一个字符串在一个可执行文件中只存在一份复制。

.radata在多个进程间是共享的,提高运行空间利用率。

修改常量会出现段错误。

一些系统中会把rodata放在ROM中(或者NOR Flash),运行时直接读取,无需加载到RAM中。

4、代码(.text 段)

存放代码和部分整数常量,和.rodata段相似,主要不同的是这个段可以执行。

5、栈(stack)

可以用于实现函数的调用,管理临时变量。

栈向下增长。

6、堆(heap)

由程序员手动分配和释放的一块内存区域。

注意malloc、realloc、free的用法。这里不再详细讲解。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值