此处nm
的手册页:MAN NM表示
符号类型。至少使用以下类型;其他人,如 好吧,取决于目标文件格式。如果是小写,则符号为 通常在当地;如果是大写,则符号为全局(外部)
下面有“b”和“B”代表“未初始化数据部分(称为BSS)”,“d”和“D”代表“初始化数据部分”
但我认为局部变量总是转到Stack / Heap而不是“Data”或“BSS”部分。然后是什么局部变量是在谈论?
答案 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部分;初始化数据进入数据部分;和常量数据可能在文本部分。