4

最初のケース:

#include <stdio.h>

int main(void)
{
    return 0;
}

サイズ出力:

text       data     bss     dec     hex filename

1115        552       8    1675     68b ./a.out

2番目のケース:

#include <stdio.h>

int global;  // new line compared to previous case

int main(void)
{
    return 0;
}

サイズ出力:

text       data     bss     dec     hex filename
1115        552       8    1675     68b ./a.out

理想的には、次のようにする必要があります。

bss=12 and all other (text and data) same

3番目のケース:

#include <stdio.h>

int global;

int main(void)
{
    static int i;  // new line compared to previous case
    return 0;
}

サイズ出力:

text       data     bss     dec     hex filename
1115        552      16    1683     693 ./a.out

正解です

2 番目のケースの出力が正しくないのはなぜですか?

4

1 に答える 1

2

おそらく、メモリを 8 バイト (64 ビット) に揃える 64 ビット アーキテクチャ用にコンパイルしています。

最初のケースのような単純なプログラムには 4 バイトの開始 bss がありますが、アライメントのために 8 バイトが割り当てられているため、グローバル変数を宣言したときに、残りの 4 バイトを埋めました。

別の 4 バイト変数を宣言すると、bss もいっぱいになるまで 8 バイトが追加されます。

于 2016-03-05T14:31:29.000 に答える