BSS段和數據段

內存分段(英語: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

-----------------------------------

 

(完)

相關文章
相關標籤/搜索