4

だから私はメモリ割り当てを研究しています.malloc();を使用してメモリを動的に割り当てることしかできないと言われました。しかし、これも動的メモリ割り当てではありませんか? それはところで動作します。だから私は少し混乱しています。

#include<stdio.h>
#include<conio.h>
int main()
{
    int integer,cntr;
    scanf("%d",&integer);
    char words[integer];
    for(cntr = 0;cntr < integer - 1;cntr++)
        words[cntr] = 'k';
    words[cntr] = '\0';
    printf("%s",words);
    getch();
    return(0);
}
4

3 に答える 3

4

それは可変長配列です。サイズは確かに動的ですが、実際には通常、ヒープではなくスタックに割り当てられます (大きすぎるものには使用しないでください)。

コンパイラなどによっては、スタック ポインタの調整にすぎず、ヒープ メモリを割り当てるよりもはるかに高速になる可能性があります。

可変長配列は C99 標準で導入されたため、非常に古い C コンパイラ (MSVC など) では使用できないことに注意してください。

于 2012-09-06T15:59:10.920 に答える
1

配列はローカル配列であり、それが定義されているscope( , ) が終了すると、自動的に割り当てが解除されます。 技術的には、標準はどこに割り当てられるべきかを定義していませんが、そのような配列が提供しなければならない特性のみを定義しています。標準では、スタックやヒープについても言及されていません。 {}

于 2012-09-06T15:59:03.570 に答える
0

配列はヒープではなくスタックに割り当てられるため、これは静的です。

メモリ マネージャーによって割り当てられるのではなく、スタック上で予約されるだけで、それ以上のことはありません。範囲外になるとすぐに存在しなくなります (使用するとガベージが提供されるという意味で)。

スタックが限られているため、このように非常に大きな配列を割り当てることはできないことに注意してください。

于 2012-09-06T15:58:48.343 に答える