什么所有局部变量转到Data / BSS段?

时间:2015-06-15 05:49:22

标签: c++ c nm

此处nm的手册页:MAN NM表示

  

符号类型。至少使用以下类型;其他人,如   好吧,取决于目标文件格式。如果是小写,则符号为   通常在当地;如果是大写,则符号为全局(外部)

下面有“b”和“B”代表“未初始化数据部分(称为BSS)”,“d”和“D”代表“初始化数据部分”

但我认为局部变量总是转到Stack / Heap而不是“Data”或“BSS”部分。然后是什么局部变量是在谈论?

2 个答案:

答案 0 :(得分:3)

此上下文中的“local”表示文件范围。

那是:

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
}

答案 1 :(得分: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部分;初始化数据进入数据部分;和常量数据可能在文本部分。