問題タブ [alloca]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
6 に答える
1289 参照

c++ - 関数ラッパーでのスタック割り当て/関数でのアロカ

スタック割り当てを抽象データ型でラップする方法を探しています。たとえば、スタック上の割り当てを介して厳密に機能できるベクトルが必要です。もちろん、私の最大のハードルはalloca、現在のスタックフレーム内でのみ機能することです。したがって、これを関数にラップする簡単な方法はわかりません。

これまでのところ、これを行う唯一の方法は、特定のスタックフレームにコンパイルされることが保証されているマクロのような関数を使用することです。このアプローチは、期待するほどタイプフレンドリーではなく、必要以上に詳細な名前を付ける必要があるため、好きではありません。

とにかく、呼び出し元スタックに割り当てる関数を取得できますか?これは通常、すぐに呼び出すスタックを破壊するため、関数も何らかの方法で強制的にインライン化する必要があることを理解しています。私は自分がどのような選択肢を持っているのかはっきりしないので、いくつかのアイデア、または可能な選択肢への指針を探しています。


ノート:

最終的な目標はstd::vector、直接の関数スタックで厳密に機能するようなものです。明らかに、それは呼び出し先にオブジェクトとして渡されるだけでconstあり、その寿命は関数で終わります。

私のマクロベースのアプローチよりも優れている限り、Cアプローチは問題ありません。一部のサポートマクロも使用できますが。

これはかなり具体的な最適化であることを理解しています。最適には、(フラグを使用して)オン/オフを切り替えることができるようにしたいと思います(デバッグに通常のstd :: vectorを使用します)。それは私たちのコードの重要な部分にわずかな速度の向上をもたらしますが、あまりにも多くの奇妙な構造を介してそれを読めなくすることを正当化するにはおそらく十分ではありません。

回答:それは不可能であり、マクロアプローチのみが機能する可能性が高いです。

0 投票する
3 に答える
9753 参照

c - Cのアロカ関数

私は C を改訂していて、スペースのようなスタックにストレージを割り当てると記述されている alloca/free 関数に出くわしました。これは malloc/free と同じですか? それともこれは何か違うのですか?ありがとう。

0 投票する
4 に答える
213 参照

c++ - 可変長クラスの割り当て

私は可変長データ構造、多次元イテレータを持っています:

イテレータの次元はコンパイル時には不明ですが、おそらく小さいので、次のようにイテレータにメモリを割り当てますalloca

イテレータにメモリを割り当てるよりエレガントな方法はありますか? alloca関数から戻ると、そのスタックが巻き戻されるため、呼び出し元のスタック フレームで使用する必要があるという事実を認識しています(例hereを参照)。この回答は、割り当てがデフォルトのパラメーターで実行されることを示唆しています。

どんなにエレガントでも、この解決策は役に立ちません: Default argument references parameter 'dim'. 素敵な解決策の提案はありますか?

0 投票する
1 に答える
279 参照

c++ - クラス スコープで動的に割り当てられたスタック メモリ

いくつかのコンパイラは C++ の拡張機能をサポートしており、スタックにメモリを動的に割り当てることができます。たとえば、VLA と同様にg++サポートします。alloca()これらの拡張機能にはすべて、動的に割り当てられたメモリが呼び出し元の関数のスコープの最後で "割り当て解除" されるという注意事項があります。(編集:明確にするために、「割り当て解除」を引用符で囲みます。実際に起こっているのは、コンパイラがスタックポインターをデクリメント/インクリメントしているため、alloca()コンパイラのサポートが必要な理由です。)これはalloca()、クラスのコンストラクター内で割り当てられたメモリが割り当て解除されることを意味します。コンストラクターが戻るとすぐに。

この制限は、コンストラクターが割り当てるメモリの量を決定するためにいくつかの重要な手順を実行するクラスで対処するのが非常に困難になります。クラスのユーザーは、クラスの構築元の関数にメモリを割り当てる必要があります。これにより、おそらく公開すべきではない内部構造が公開されます。さらに、コードalloca()や VLA を使用できるようにするための回避策をコードに入れることは、一般的に不便です。

alloca()、VLA、またはその他の言語拡張機能を使用して、クラス内でメモリを割り当て、クラス スコープを持つことができるように、この制限を回避する方法を考えてもらえますか?

0 投票する
2 に答える
162 参照

c - アロカの用途は何ですか?

重複の可能性:
alloca()はどのような場合に役立ちますか?

私は最近、alloca()関数の使用を偶然目にしました。グーグル検索は、それがスタックにスペースを割り当てるために使用されていることを私に教えてくれました。アプリケーションを取得できませんか?また、これを使用する際の落とし穴はありますか?

0 投票する
2 に答える
391 参照

c++ - C ++がスタックから「_alloca」tedメモリを解放する

_alloca の動作は、関数を終了するときにメモリをスタックから解放することであることを知っています。メモリを早く解放する方法はありますか?

0 投票する
1 に答える
736 参照

c++ - アーキテクチャ x86_64 の未定義シンボル: "_alloca"

プロジェクトをpolyworldにしようとしていますが、qt_clust.o のコンパイル中にエラーが発生します

そして得る

問題はこのファイルにあると確信しています: https://github.com/JaimieMurdock/polyworld/blob/master/tools/clustering/qt_clust.cpp

OSX Mountain Lion を使用しています。

0 投票する
1 に答える
1740 参照

llvm - LLVM での alloca/memset の使用目的

を使用してスタックにスペースを割り当てる場合alloca()、メモリをクリアする必要がありますか、それともゼロのみを含むことが保証されていますか?

次のLLVMコードを思いつきました。コンパイルはできますが、コア ダンプが発生します。

コードでは、オブジェクトのインスタンス化を実装してから、それを「メンバー変数」に割り当てようとしていました。