alloca()
は、 の場合のようにヒープ上ではなくスタック上にメモリを割り当てますmalloc()
。そのため、ルーチンから戻るとメモリが解放されます。つまり、これは実際に動的に割り当てられたメモリを解放するという私の問題を解決します。 を通じて割り当てられたメモリの解放はmalloc()
大きな頭痛の種であり、何らかの理由でそれを見逃すと、あらゆる種類のメモリの問題につながります。
alloca()
上記の機能にもかかわらず、の使用が推奨されないのはなぜですか?
ベストアンサー1
答えはman
ページの中にあります(少なくともリナックス):
戻り値 alloca() 関数は、割り当てられた領域の先頭へのポインタを返します。割り当てによってスタック オーバーフローが発生した場合、プログラムの動作は未定義になります。
これは、決して使用すべきではないと言っているわけではありません。私が取り組んでいる OSS プロジェクトの 1 つでは、これを広範に使用していますが、これを乱用しない限り (alloca
巨大な値に ' しない限り)、問題ありません。「数百バイト」のマークを超えたら、malloc
代わりに やその仲間を使用する時です。割り当てに失敗する可能性はありますが、少なくともスタックを吹き飛ばすのではなく、失敗の兆候がいくつか得られます。