重複の可能性:
宣言とmallocの違い
違いは何ですか:
char * a = malloc(size);
と
char a[size];
一方はもう一方よりも優れていますか?mallocを使用することに何か利点はありますか?
重複の可能性:
宣言とmallocの違い
違いは何ですか:
char * a = malloc(size);
と
char a[size];
一方はもう一方よりも優れていますか?mallocを使用することに何か利点はありますか?
スタックに割り当てられたメモリのライフタイム スコープを制御することはありません。スコープが有効である限り有効です (静的にしない限り)。
malloc
ヒープにメモリを割り当てるためのものです。free
その記憶を呼び出すまで有効です。
通常、実際には新しいメモリを割り当てていないため、スタックにメモリを割り当てる方が高速です。すでに使用しているものをさらに予約しているだけですが、ライフタイムを制御していないため、スコープによって制御されます。ブロックまたは関数。
char *a = malloc(size);
と char *a[size];`の違いは何ですか?
最初のものは、へのポインターを宣言し、ヒープにバイトをchar
割り当てます。2 番目のものは、ポインターの断片をsize
割り当てます。それらは同等ではありません。size
char
一方は他方よりも優れていますか?
いいえ、用途が異なります。
を使用する利点はあります
malloc()
か?
はい。関数から配列を返したい場合、これはできません:
char a[size];
return a;
thena
は戻り後に範囲外になり、それを使用すると未定義の動作が発生するためです。したがって、この場合は使用する必要があります
char *a = malloc(size);
return a;
(関数から毎回新しい文字列を返したいと思われるため、一般的にはこれが当てはまります。ただし、これが必要でない場合は、ローカルで宣言された静的配列を使用できます。)
ただし、配列をローカルでのみ使用する場合は、自動 (スタック) 配列を使用することをお勧めしますmalloc()
。これは、メモリの断片化の増加を回避し、スタック操作がヒープ アクセスより高速になる可能性があるためではありません。