問題タブ [stack]

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 投票する
8 に答える
17190 参照

c - 大きな配列を宣言するときにスタック オーバーフロー例外を取得する

次のコードは、スタック オーバーフロー エラーを生成しています

どうすればこれを回避できますか? Turbo C++ を使用していますが、コードは C のままにしたいと考えています。

編集:

アドバイスをありがとう。上記のコードは単なる例であり、実際にはサブメインではなく関数で配列を宣言しています。また、配列をゼロに初期化する必要があったため、malloc で検索したところ、calloc が私の目的に最適であることがわかりました。

Malloc/calloc には、変数を使用してサイズを宣言できるというスタックへの割り当てよりも利点もあります。

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

c - backtrace() を使用するよりもコール スタックの深さを調べる安価な方法はありますか?

私のロギング コードはbacktrace()の戻り値を使用して現在のスタックの深さを判断します (きれいに印刷するため) が、プロファイリングから、これはかなり高価な呼び出しであることがわかります。

これを行うより安価な方法はないと思いますか?フレームアドレスは気にしないことに注意してください。フレームアドレスがいくつあるかだけです。

編集: これらのログ機能は大規模なコードベース全体で使用されるため、スタックの深さを手動で追跡することは実際にはオプションではありません。

0 投票する
10 に答える
57625 参照

c++ - C ++での適切なスタックとヒープの使用?

私はしばらくプログラミングをしていますが、ほとんどが Java と C# です。実際に自分でメモリを管理する必要はありませんでした。私は最近 C++ でプログラミングを始めましたが、スタックに格納するタイミングとヒープに格納するタイミングについて少し混乱しています。

私の理解では、非常に頻繁にアクセスされる変数はスタックとオブジェクトに格納する必要があり、めったに使用されない変数、および大きなデータ構造はすべてヒープに格納する必要があります。これは正しいですか、それとも間違っていますか?

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

c++ - swig でラップされた C++ クラスのインスタンスを lua スタックにプッシュするにはどうすればよいですか?

swig でラップされ、lua に登録されたクラスがあります。このクラスのインスタンスを lua スクリプトで作成でき、すべて正常に動作します。

しかし、新しい X への呼び出しを使用して C++ コードで作成されたクラスのインスタンスがあり、呼び出したい関数を含む la lua_state L があり、1 つの引数、X のインスタンスを受け入れるとします...その関数を呼び出すにはどうすればよいですか。これが問題のコードの(一部)です(エラー処理のものは省略しました):

main.cpp

mainmenu.lua

現時点で私が見つけたのは、swig で生成された cpp ファイルからいくつかの機能を公開し、それを呼び出すことだけです。これにはいくつかの理由があります...複数のモジュールがある場合は機能せず、swig ファイルのデフォルトのリンケージ仕様を変更する必要がありました (-DSWIGRUNTIME= を使用)。

以下を main.cpp に追加します

モジュールへのポインターを取得し、次に型へのポインターを取得し、swigs 関数を呼び出して登録します。人間が読めるはずのないファイルを掘り下げなければならないのは不合理なことでした (そのため、ファイルの上部に記載されています)。(しかし、それは機能します!)

確かに、私がやろうとしていることを達成するためのより良い方法があります。

高レベルの pov からの PS 私が望むのは、GuiInst の Object Factory によって作成された Gui コンポーネントを lua が参照しないようにすることです。いくつかの非常に単純な (そして非 swig) Python モジュールを除いて、スクリプト言語に機能を公開するのはこれが初めてなので、アドバイスを受ける準備ができています。

アドバイスをありがとう!


RBerteig によるコメントへの応答

GuiInst のコンストラクターは、lua がそのインスタンスを構築するのを防ぐために、swig が実行されるときにプライベートに #defined されるため、私にとってはうまくいきません。私が防ごうとしていたのは次のことでした(luaで):

これは "g=new GuiButton" を呼び出し、GuiRegionVertical (さまざまな理由でポインターを格納する必要があります) に登録し、"delete g" を呼び出します。GuiRegionVertical には g へのポインターがぶら下がったままになります。

本当に必要なことは、GuiRegionVertical::Add(GuiButton*) が GuiButton* の参照カウントをインクリメントし、GuiRegionVertical のデストラクタがすべてのコンテンツの参照カウントをデクリメントすることだと思いますが、これがどのように行われるかはわかりませんスウィグで行われます。

これにより、プライベート コンストラクター、Gui オブジェクト ファクトリ、厄介な外部関数が不要になります。

私はこれについて間違っていますか?

ありがとう。

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

c++ - オブジェクトがスタック上にあるかどうかを識別する方法は?

C++ でスタックまたはヒープにオブジェクトを割り当てるための経験則を探していました。ここでSOに関する多くの議論を見つけました。多くの人が、それはオブジェクトの寿命に関するものだと言いました。関数のスコープよりも長い寿命が必要な場合は、ヒープに入れます。それは完全に理にかなっています。

しかし、私を混乱させたのは、多くの人が、オブジェクトが小さい場合はスタックに割り当てるということです。オブジェクトが大きい場合は、ヒープに入れます。しかし、オブジェクトを識別する方法が大きいかどうかについて、誰も言いませんでしたか?

以下の質問があります。

  1. オブジェクトが大きいかどうかを識別する方法は?
  2. スタックの最大サイズは?OSごとにスタックサイズが異なる?
  3. ラップするラッパークラスがありますvector<string>。約100アイテムになります。このクラスをスタックに割り当てると、スタック オーバーフローが発生しますか? 私はこれを試しましたが、完全に機能しました。私が何か間違ったことをしているかわからない。
0 投票する
4 に答える
2263 参照

c++ - 構造化された例外の場合のスタックの巻き戻し

この質問は、ここで説明されている問題をより明確にします。さらに調査を行ったところ、次のコードではスタックの巻き戻しが行われていないことがわかりました。

VC6 SP5 コンパイラを使用してこのコードをコンパイルしたところ、出力は "Wrapper constructor :: AddRef!!!" です。(つまり、スタック上に構築されたラッパー オブジェクトのデストラクタが呼び出されません。これは予想される動作ですか?それとも VC コンパイラのバグですか?この場合、スタックの巻き戻しが発生するようにコンパイラ フラグを使用できますか?

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

64-bit - 64 ビット スレッドのオーバーヘッド

64 ビット Windows でのスレッドのオーバーヘッドは? スタック用の 1 MB のユーザー空間と 32 ビットの少量のカーネル空間だったと思います。

ありがとう

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

algorithm - O(1) 償却時間でデキューできるスタックを設計しますか?

左から右に格納されたリストとして表示できる抽象データ型があり、次の操作が可能です: プッシュ: リストの左端に新しいアイテムを追加する ポップ: リストの左端にあるアイテムを削除する プル: リストの右端のアイテムを削除します

プッシュ、ポップ、またはプル操作の償却時間が一定になるように、3 つのスタックと一定の追加メモリを使用してこれを実装します。スタックには、isEmpty、Push、および Pop という基本的な操作があります。

償却された時間とは、「この時間を費やすと、別のブロックを費やして、後で使用するために時間の銀行に保存できる」ことを意味します。各プッシュ操作と同様に、一定時間の 3 つのブロックを費やすため、要素がプッシュされるたびに、一定時間の 2 つの余分なブロックがあります。

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

javascript - JavaScript でのスタック操作

JavaScript でスタックを実装しています。

検討:

ここで、ユーザーは値 2 をポップします。

これはスタックの許容可能な動作ですか? 私は自分のスタックをローリングしていますが、これを行う組み込みのコードはありますか?

私のコード:

スタックがこのアプリケーションの正しいタイプのデータ構造でない場合、正しいタイプはどれですか?