bss段屬於靜態記憶體分配。通常是指用來存放程式中未初始化的全域性變數和未初始化的區域性靜態變數。未初始化的全域性變數和未初始化的區域性靜態變數預設值是0,本來這些變數也可以放到data段的,但是因為他們都是0,所以為他們在data段分配空間並且存放資料0是沒有必要的。
程式在執行時,才會給bss段裡面的變數分配記憶體空間。
在目標檔案(*.o)和可執行檔案中,bss段只是為未初始化的全域性變數和未初始化的區域性靜態變數預留位置而已,它並沒有內容,所以它不佔據空間。
section table中儲存了bss段(未初始化的全域性變數和未初始化的區域性靜態變數)記憶體空間大小總和。
(objdump -h *.o 命令可以看到)
資料段(datasegment)通常是指用來存放程式中已初始化的全域性變數
Linux下x86 64程序位址空間布局
關於linux 32位記憶體下的記憶體空間布局,可以參考這篇博文linux下c程式程序位址空間局關於源 中各種資料型別 在elf格式檔案以及程序空間中所處的段,在x86 64下和i386下是類似的,本文主要關注vm.legacy va layout以及kernel.randomize va spac...
虛擬位址空間布局
在多工系統中,每個程序都執行在自己的虛擬位址空間上,32為模式下它是乙個4g的記憶體位址塊,在linux系統下主要分為1g核心空間和3g使用者空間,而在windows系統下,核心空間和使用者空間的劃分比例為2 2.位於虛擬位址空間最低部分為保留區,未賦予實體地址 text 為 段用來存放程式執行 d...
程序的儲存空間布局
詳情參見我的另一篇博文 linux原始碼解析 記憶體描述符 mm struct 以下摘自 一條程序的棧區 堆區 資料區和 區在記憶體中的對映 1 棧區 主要用來存放區域性變數,傳遞引數,存放函式的返回位址。esp 始終指向棧頂,棧中的資料越多,esp的值越小。2 堆區 用於存放動態分配的物件,當你使...