內存分段(英語:Memory segmentation),一種電腦內存的管理技術,它將電腦的主內存分紅許多區段(segment或sections)。當處理器要進行內存定址時,會使用一個數值,這個數值包括了某個區段,以及偏移量(offset)。一個程式的目的檔(Object file)中也會使用區段,讓它們能夠連接成執行檔,並載入內存中執行。架構
BSS段:spa
在採用段式內存管理的架構中,BSS段(bss segment)一般是指用來存放程序中未初始化的全局變量的一塊內存區域。BSS是英文Block Started by Symbol的簡稱。BSS段屬於靜態內存分配。.bss section 的空間結構相似於 stack。特徵:靜態變量、未顯式初始化、在變量使用前由運行時初始化爲零。內存
數據段:內存管理
在採用段式內存管理的架構中,數據段(data segment)一般是指用來存放程序中已初始化且不爲0的全局變量的一塊內存區域。數據段屬於靜態內存分配。io
程序03:變量
/* stack03.c */file
int a;gc
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
-----------------------------------
(完)