問題タブ [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.
c++ - メモリ管理、ヒープ破損、およびC ++
だから、私はいくつかの助けが必要です。私はC++でプロジェクトに取り組んでいます。しかし、どういうわけかヒープを壊してしまったと思います。std::string
これは、クラスにを追加し、別のクラスから値を割り当てたという事実に基づいていstd::string
ます。
スタックダンプでシステムがクラッシュします。したがって、基本的には、コードとメモリ管理のすべてを停止して調べ、どこで失敗したかを見つける必要があります。コードベースはまだ小さい(約1000行)ので、これは簡単に実行できます。
それでも、こういうのは頭がおかしいので、捨てようと思いました。私はLinuxシステムを使用していて、をいじくり回しましvalgrind
た。私が何をしているのか完全にはわかりませんstd::string
が、のデストラクタは無効なフリーであると報告されました。Google検索から「ヒープの破損」という用語を取得したことを認めなければなりません。この種のものに関する一般的な目的の記事も同様にいただければ幸いです。
(前にrm -rf ProjectDir
、C#でもう一度やり直してください:D)
編集:私はそれを明確にしませんでしたが、私が求めているのは、この種のメモリの問題を診断するためのアドバイスです。std :: stringのものが正しいことを知っているので、それは私がやったことです(またはバグですが、Selectに問題はありません)。私が書いたコードをチェックでき、非常に賢い人ならすぐに問題を見つけることができると確信していますが、この種のコード分析を私の「ツールボックス」に追加したいと思います。
c++ - ヒープ上にオブジェクトが作成されないようにするにはどうすればよいですか?
プラットフォームに依存しないC++コードで、オブジェクトがヒープ上に作成されないようにする方法を知っている人はいますか?つまり、クラス「Foo」の場合、ユーザーがこれを実行できないようにします。
そして、これを行うことだけを許可します。
誰かアイデアはありますか?
乾杯、
c - Cで利用可能なスタックサイズを確認する
GCC 3.4.5 (mingw-special vista r3) で MinGW を使用しています。
私の C アプリケーションは多くのスタックを使用するので、スタックが不足しそうになった場合に状況をきれいに処理できるように、プログラムでスタックがどれだけ残っているかを知る方法はないかと考えていました。
そうでない場合、スタックスペースが不足する可能性があるという問題を回避する方法は他にありますか?
どのサイズのスタックから始めればよいのかわからないので、プログラムでもそれを特定する必要があります。
linux - Linux マルチスレッド アプリのスタック使用量の測定
Linux 組み込みプラットフォーム用のマルチスレッド アプリを開発しています。
現時点では、(pthread_set_attr を使用して) 各スレッドのスタック サイズをかなり大きなデフォルト値に設定しています。アプリケーションのメモリ使用量を減らすために、各スレッドの値をより小さな値に微調整したいと考えています。プログラムがクラッシュするまで、各スレッドのスタック サイズを徐々に小さい値に設定するという試行錯誤のルートをたどることができますが、アプリケーションはそれぞれ完全に異なる機能/属性を持つ最大 15 個のスレッドを使用するため、そのアプローチには非常に時間がかかります。
むしろ、各スレッドのスタック使用量を直接測定できることを望んでいます。これを行うために人々が推奨できるユーティリティはありますか? (たとえば、私は vxWorks のバックグラウンドを持っており、vxWorks シェルから「ti」コマンドを使用すると、スタックの使用状況に関する統計情報や、タスク ステータスに関するその他の有用な情報が直接得られます。)
ありがとう
c - C での TCP スタックへのフック
ここでやりたいのは単なるキャプチャではありません。最初にパケットをキャプチャし、次にリアルタイムで特定のデータのペイロードをチェックし、それを削除し、署名を挿入し、パケットをスタックに再注入して、以前と同じように送信したいと考えています。
IPFW を使用して ipfw 迂回ソケットを読みましたが、非常に有望に見えます。パケットを変更し、迂回ソケットを使用してそれらをスタックに再注入する例についてはどうですか? また、好奇心の問題として、Java を使用してソケットからデータを読み取ることは可能でしょうか。
algorithm - 2 つのスタックを使用してキューを実装する方法は?
2 つのスタックがあり、他の一時変数はないとします。
2 つのスタックのみを使用してキュー データ構造を「構築」することは可能ですか?
memory-management - スタックとヒープとは何ですか?
プログラミング言語の本では、値型はスタック上に作成され、参照型はヒープ上に作成されると説明されていますが、この 2 つが何であるかは説明されていません。私はこれについての明確な説明を読んだことがありません。スタックとは何かを理解しています。しかし、
- それらはどこにあり、何ですか (物理的には実際のコンピューターのメモリ内にあります)。
- それらは OS または言語ランタイムによってどの程度制御されますか?
- 彼らの範囲は何ですか?
- それぞれの大きさは何で決まるのですか?
- 何が速くなるの?
.net - IIS では .NET コードからスタック オーバーフローが発生するが、Winforms では発生しない
過去8時間ほど追跡/解決しようとしてきた厄介なスタックオーバーフローがあり、アドバイスが必要だと思うところまで来ました。
詳細: 興味深いことに、通常の winforms アプリケーションのコンテキストで呼び出された場合、このコードは問題なく動作しますが、私はソフトウェアの Web ベース バージョンを作成する任務を負っています。 IIS で実行されている ASPX ページ。私が最初にしたことは、アタッチして、Visual Studio を介して通常の .NET デバッグを試みることでした。例外の時点で、コール スタックは比較的浅く (コードの約 11 フレームの深さ)、スタック オーバーフローの通常の疑い (不適切な再帰、自己呼び出しコンストラクター、例外ループ) を見つけることができませんでした。
だから私は、windbg と SOS を分解することに自分自身を辞任しました。何時間も遊んだ後、役に立つデータがいくつかあると思いますが、それを分析する助けが必要です。
最初は、スタック オーバーフローが発生する直前に壊れていた !dumpstack です。
そこにはたくさんのものがありますが、私の(確かに限られた)スタック分析知識ではループを示しているものは何もありません。ただし、この次のセクションには何らかの価値があると思います。これは、同じブレークポイントで取得した !dumpstackobjects です。
^^ この投稿に合わせるために、上記の一部を切り取る必要がありましたが、このまま続くと想像してみてください ^^
カスタム コードの詳細は無視してください。これはすべて私には過剰に思えますが、私はスタックの専門家ではありません。上記のスタック オブジェクト (1500 以上あります) のほとんどは関数パラメーターではないため、そこに属していないと思います。以下は、スタック上でこれらすべての項目を生成する種類のコードの例です (このような大量のコードが実行されます)。
私は VB の専門家でもありません (このコードは、私が通常は使用しないアプリケーションの別の部分からのものです) が、このようなコードでスタックがいっぱいになるのは正常ですか? 誰かが洞察を持っている場合、またはこの種のものに関する情報を含むリソースの方向性を教えてくれる場合は、大歓迎です. ご覧いただきありがとうございます。
c# - ++が+1と同じ結果を生成しないのはいつですか?
次の2つのC#コードスニペットは、異なる結果を生成します(再帰呼び出しの前後の両方で変数レベルが使用されると想定しています)。なんで?
、
以下の回答のいくつかを読んだ後、この問題を欺く方法を強調するために、level ++、++ level、およびlevel+1のスタックトレースを投稿する価値があると思いました。
この投稿のためにそれらを簡略化しました。再帰呼び出しシーケンスはDoStuff(1)で始まります。
//レベル++
//++レベル
//レベル+1
c - 優れた設計でスタックスペースを確保するには?
RTOSを備えたRAM制限付き組み込みマイクロコントローラー用にCでプログラミングしています。
私は定期的にコードを短い関数に分割していますが、すべての関数呼び出しにはより多くのスタック メモリが必要です。すべてのタスクは自分のスタックを必要とし、これはプロジェクトの重要なメモリ消費者の 1 つです。
コードを適切に整理して読みやすくし、メモリを保持する代替手段はありますか?