【问题标题】:What all local variables goto Data/BSS segment?所有局部变量都转到数据/BSS 段?
【发布时间】:2015-06-15 05:49:22
【问题描述】:

nm 的手册页在这里:MAN NM

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

下面有“b”和“B”表示“未初始化的数据段(称为 BSS)”,“d”和“D”表示“初始化的数据段”

但我认为局部变量总是转到堆栈/堆而不是“数据”或“BSS”部分。那nm说的局部变量是什么?

【问题讨论】:

标签: c++ c nm


【解决方案1】:

在此上下文中的“本地”表示文件范围。

即:

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
}

【讨论】:

    【解决方案2】:

    函数范围静态变量位于数据或 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 部分;初始化数据进入数据部分;并且常量数据可能放在文本部分。

    【讨论】:

      猜你喜欢
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 2015-12-01
      • 2014-02-03
      • 2011-09-09
      • 1970-01-01
      • 2011-04-19
      相关资源
      最近更新 更多