浅谈C语言程序分区

来源:互联网 发布:免费制谱软件 编辑:程序博客网 时间:2024/06/06 02:01

学过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的用法。这里不再详细讲解。

原创粉丝点击