[解決済み] なぜalloca()の使用はグッドプラクティスとみなされないのでしょうか?
2022-03-21 04:15:43
質問
alloca()
のように、ヒープ上ではなくスタック上にメモリを確保します。
malloc()
. だから、ルーチンから戻ったときにメモリは解放される。つまり、実はこれで、動的に割り当てられたメモリを解放するという私の問題が解決されたわけです。で割り当てられたメモリの解放
malloc()
は大きな頭痛の種で、何らかの形で見逃すと、あらゆる種類のメモリの問題につながります。
なぜ
alloca()
上記のような特徴があるにもかかわらず、推奨されないのでしょうか?
解決方法は?
その答えは
man
ページ(少なくとも
リナックス
):
戻り値 alloca()関数は、alloca()関数の先頭へのポインタを返します。 を使用します。 もし アロケーション スタックオーバーフローの場合、プログラムの動作は未定義である。
決して使ってはいけないというわけではありません。 私が働いているOSSプロジェクトの1つでは、これを広範囲に使用していますし、乱用しない限りは(
alloca
巨大な値を持つ)、それは問題ない。 数百バイトの値を超えたら、その時点で
malloc
とその仲間たちです。 それでもアロケーションに失敗することはありますが、少なくともスタックを吹き飛ばすのではなく、失敗の兆候を示すことができるようになります。
関連
-
C 構造体定義エラー: '['トークンの前に一次式があることが予想される
-
構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
-
[解決済み] alloc、malloc、alloca - 違いは何ですか?
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] mallocで文字列を確保する
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] mallocとcallocの違い?
-
[解決済み] なぜJavaのVector(およびStack)クラスは時代遅れ、または非推奨とされているのですか?
-
[解決済み] C言語で変数はメモリのどこに格納されていますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
C 構造体定義エラー: '['トークンの前に一次式があることが予想される
-
C - 添え字の値が配列でもポインタでもベクトルでもないエラー
-
コンパイルエラー:可変長オブジェクトが初期化されていない可能性があります。
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] char *とchar[]の違い [重複]
-
[解決済み] "static const" vs "#define" vs "enum"
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み] printfにおけるdoubleの正しい書式指定子
-
[解決済み] C言語でファイルサイズを取得するには?[重複]する