3

ここのmanページnmMAN NMはそれを言います

シンボル タイプ。少なくとも次のタイプが使用されます。その他は、オブジェクト ファイルの形式によって異なります。小文字の場合、シンボルは通常ローカルです。大文字の場合、シンボルはグローバル (外部)

その下には、「初期化されていないデータ セクション (BSS として知られている)」を表す「b」と「B」、および「初期化されたデータ セクション」を表す「d」と「D」があります。

しかし、ローカル変数は常にスタック/ヒープに移動し、「データ」または「BSS」セクションには移動しないと思いました。それでは、nmが話しているローカル変数は何ですか?

4

2 に答える 2

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
}
于 2015-06-15T06:05:15.487 に答える
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ストレージ クラス指定子の有無にかかわらず、ファイル スコープで定義された変数にも同様の規則が適用されます。初期化されたデータは Data セクションに入ります。定数データはおそらく Text セクションに入ります。

于 2015-06-15T06:34:37.317 に答える