内存分段(英语:Memory segmentation),一种电脑内存的管理技术,它将电脑的主内存分成许多区段(segment或sections)。当处理器要进行内存定址时,会使用一个数值,这个数值包括了某个区段,以及偏移量(offset)。一个程式的目的档(Object file)中也会使用区段,让它们可以链接成执行档,并载入内存中执行。
BSS段:
在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。.bss section 的空间结构类似于 stack。特征:静态变量、未显式初始化、在变量使用前由运行时初始化为零。
数据段:
在采用段式内存管理的架构中,数据段(data segment)通常是指用来存放程序中已初始化且不为0的全局变量的一块内存区域。数据段属于静态内存分配。
程序03:
/* stack03.c */
int a;
int main(int argc, char * argv[]) {
return 0;
}
程序04:
/* stack04.c */
int a = 12;
int main(int argc, char * argv[]) {
return 0;
}
程序05:
/* stack05.c */
int a = 0;
int main(int argc, char * argv[]) {
return 0;
}
汇编代码:
-----------------------------------
TITLE stack03.c
_DATA SEGMENT
COMM _a:DWORD※仅仅是定义
_DATA ENDS
-----------------------------------
TITLE stack04.c
PUBLIC _a
_DATA SEGMENT
_a DD 0cH※不是零的初始化。
_DATA ENDS
-----------------------------------
TITLE stack05.c
PUBLIC _a
_BSS SEGMENT
_a DD 01H DUP (?)※零的初始化
_BSS ENDS
-----------------------------------
AT汇编:
-----------------------------------
.file "stack03.c"
.comm _a, 4, 2 ※仅仅是定义
-----------------------------------
.file "stack04.c"
.globl _a
.data
.align 4 ※不是零的初始化。
_a:
.long 12
-----------------------------------
.file "stack05.c"
.globl _a
.bss
.align 4 ※零的初始化
_a:
.space 4
-----------------------------------
(完)
来源:oschina
链接:https://my.oschina.net/u/660460/blog/803574