2015-06-15 51 views
3

nm這裏的手冊頁:MAN NM什麼所有本地變量轉到數據/ BSS段?

符號類型。至少使用以下類型;其他的,如 那麼,取決於目標文件格式。如果小寫,符號通常是 本地;如果大寫字母,符號是全局的(外部)

而且它的下面具有「b」和「B」爲「未初始化的數據部分(也稱爲BSS)」和「d」和「d」爲「初始化數據部分「

但我認爲本地變量總是轉到堆棧/堆,而不是」數據「或」BSS「部分。那麼nm在談論什麼局部變量?

+0

[關於分配哪裏變量的分享](http://stackoverflow.com/questions/12798486/bss-segment-in-c) – Lundin

回答

3

在此上下文中的「本地」是指文件範圍。

即:

static int local_data = 1; /* initialised local data */ 
static int local_bss; /* uninitialised local bss */ 
int global_data = 1; /* initialised global data */ 
int global_bss; /* uninitialised global bss */ 

void main (void) 
{ 
    // Some code 
} 
0

函數作用域的靜態變量都會在數據或BSS(或文本)部分,這取決於初始化:

void somefunc(void) 
{ 
    static char array1[256] = "";   // Goes in BSS, probably 
    static char array2[256] = "ABCDEF…XYZ"; // Goes in Data 
    static const char string[] = "Kleptomanic Hypochondriac"; 
              // Goes in Text, probably 
    … 
} 

類似的規則適用於在文件中定義的變量範圍,帶或不帶static存儲類說明符 - 未初始化或零初始化數據進入BSS部分;初始化數據進入數據部分;並且常量數據可能在Text部分中出現。

相關問題