1

初期化されていないデータは、変更後にどこに保存されるのでしょうか?

例えば、

コード内で何らかの値に初期化されるすべての変数は、.data セクションに格納されます。

初期化されていないすべての変数は、コンパイラによって 0 に初期化され、.bss セクションに格納されます。

ここで、コードで 10 個の整数の配列を定義するとします。ただし、この配列の要素は指定しません。したがって、配列のすべての整数はコンパイラによって 0 に初期化され、40 バイトが .bss セクションに予約されます。

この後、配列にデータを書き込みますが、.bss セクション自体のデータを変更しますか?

#include <stdio.h>
#include <math.h>

int main(int argc, char **argv)
{
    int i;

    /* 10 integers are initialized to 0 and stored in the .bss section */

    unsigned int numbers[10];

    /* write data to array */

    for(i=0;i<10;i++)
    {
        numbers[i]=pow(2,i);
    }
4

6 に答える 6

4

.bss には、初期化されていないグローバル変数と静的変数が含まれています。あなたの例では、配列はスタックに配置されます。

于 2013-07-25T06:53:49.290 に答える
2

ここで2つのことを混同しています。について話している場合.bss、または.dataセクションについて話している場合は、ローカル (例のように) とグローバル/静的変数について話していることになります。

あなたの例のように、ローカル変数はスタックに割り当てられます。.bss/.data関与はありません。このデータは初期化されず、スタック上の値が何であれ、ランダムな値を持ちます。

初期化されていないグローバル/静的変数は、プログラムの開始時に 0 に初期化されます。

于 2013-07-25T06:55:48.153 に答える
1

以前の回答で、あなたの例では数値配列は .bss セクションではなくスタックに格納され、数値型またはオブジェクトの NULL の場合、グローバル変数と静的変数のみが 0 に初期化されると既に言われていました

次の例は、さまざまな変数が格納される場所を示しています

int abc = 1;                            ---->   Initialized Read-Write Data
char *str;                              ---->   BSS
const int i = 10;                       ----->  Initialized Read-Only Data

main()
{
    int ii,a=1,b=2,c;                   ----->  Local Variables on Stack

    char *ptr;
    ptr = malloc(4);                     ------> Allocated Memory in Heap

     c= a+b;                             ------> Text

}

ここにも素敵な説明があります

于 2013-07-25T07:10:43.837 に答える
0

あなたの例では、配列はで宣言されていstackます。

したがって何も進まない.bss

于 2013-07-25T06:53:52.177 に答える
0

初期化されていないすべての変数は、コンパイラによって 0 に初期化され、.bss セクションに格納されます。

いいえ、初期化されていないグローバル変数と静的変数のみが 0 に初期化されます。

于 2013-07-25T06:55:24.417 に答える