曲径通幽论坛
标题:
.text | .data | .bss | .constdata | stack | heap | RO
[打印本页]
作者:
beyes
时间:
2009-9-8 18:07
标题:
.text | .data | .bss | .constdata | stack | heap | RO
.text
段是代码段。它用来放程序代码(
code
)。它通常是只读的(程序代码,编译好了就确定了,不可能改来改去的嘛)。
.data
段是数据段。它用来存放初始化了的(
initailized
)全局变量(
global
)和初始化了的静态变量(
static
)。它是可读可写的。
.bss
段是全局变量数据段。它用来存放未初始化的(
uninitailized
)全局变量(
global
)和未初始化的静态变量(
static
)。它也是可读可写的。
bss
是英文
Block Started by Symbol
的缩写。之所以把
bss
跟
data
分开来,是因为系统会为这些
bss
段的变量的初值清零。
.constdata
段是常量数据段。它用来存放常量(
const
)。它也是只读的。
源程序中使用
malloc
分配的内存就是
bss
这一块,它的大小不是根据
data
的大小确定的,主要是由程序中同时分配内存最大值所确定的,不过如果超出了范围,也就是分配失败,可以等空间释放之后再分配。
以上这些段,用户可以非常灵活的定义其首地址和大小。但对大部分用户来说,程序代码区在
ROM
或
FLASH
中,可读写区域在
SRAM
或
DRAM
中。考虑一下自己程序规模,函数调用规模,内存使用大小,然后,参照一个连接定位文件,稍加修改就可以了
栈
(
stack
)
就是通常我们所说的堆栈。它用来
保存函数的局部变量和参数。其操作方式类似于数据结构中的栈,是一种
“
后进先出
”
(
Last In First Out
,
LIFO
)的数据结构。这意味着最后放到栈上的数据,将会是第一个从栈上移走的数据,对于哪些暂时存储的信息,和不需要长时间保存的信息来说,
LIFO
这种数据结构非常理想。在调用函数或过程后,系统通常会清除栈上保存的局部变量、函数调用信息及其它信息。栈的顶部通常在可读写的
RAM
区的最后,其地址空间通常
“
向下减少
”
,即当栈上保存的数据越多,栈的地址就越小。
堆
(
heap
)
就是通常我们说的
动态内存分配。它用来管理动态内存的。其操作方式跟数据结构中的堆,是不同的。
在
ARM
的集成开发环境中,
1
、只读的代码段称为
Code
段,即上述的
.text
段。
2
、只读的常量数据段,被称作
RO Data
段,即上述的
.constdata
段。
以上两个段统称为
RO
段(
Read Only
),放在
ROM
或
FLASH
等非易失性器件中。
3
、可读可写的初始化了的全局变量和静态变量段,被称作
RW Data
段(
ReadWrite)
,即上述的
.bss
段。
4
、可读可写的未初始化的全局变量和静态变量段,被称作
ZI Data
段(
Zero Init
),即上述的
.data
段。因为这个段里的变量要被初始化为零,所以叫
ZI
段。
以上两个段统称为
RW
段,而在运行时,它必须重新装载到可读可写的
RAM
中。
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/)
Powered by Discuz! X3.2