問題タブ [stack-memory]

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

c++ - スタック オブジェクトから例外をキャッチできません

良い一日をお過ごしください。

私は Berkley C Networking API をラップするクラスに取り組んでいますが、これまでのところ、TCP サーバー/クライアントしか動作していません。

皮肉なことに、私が抱えている問題はネットワーキングではなく、スタックとヒープにあります。おそらく私はそれを完全には理解していませんが、次のようなものを使用すると ClientSocket *mysock = new ClientSocket(); 、 -> 演算子を使用して関数を呼び出すだけで、完全に正常に動作します-エラーが発生した場合、私の SocketException クラスは問題なくキャッチされます。

しかし、私が使用すると: ClientSocket mysock; そして、を使用して関数を呼び出すときに例外がスローされます。オペレーター、それは示しています: terminate called after throwing an instance of 'SocketException' Aborted そして、端末プロンプトに戻ります。

追加するのを忘れていましたが、呼び出しを try/catch ブロックでラップしています。

最初の例は「new」キーワードを使用してヒープ上の新しい ClientSocket インスタンスへのポインターを返し、2 番目の例はスタック用であることは承知していますが、問題はわかりません。

ポインター/参照/スタック/ヒープについて何かが足りないと思っていますが、何が起こっているのかわかりません。多くの場合、コードは問題なく実行されますが、例外がスローされた場合.... >:(

編集: リンク ページでは、Client.cxx と Server.cxx がサンプル ファイルです。ご指摘ありがとうございます、エリック。これを手伝っていただければ幸いです。このプロジェクトのソースは次の場所
にあります: すべてのファイルへのリンク: http://furryhead.co.cc/problem.html
(2 つ以上のリンクを貼り付けることができませんでした。また、4 つのファイルがあるため、これを行う必要があります。誰かが私の投稿にリンクをマージできます) 注意: Socket.cxx はかなり大きく、ServerSocket、ClientSocket、および SocketException の定義が含まれています。

上記のすべてのファイルをコンパイルするコマンドは次のとおりです。
g++ -c Socket.cxx -o Socket.o
g++ -c Server.cxx -o Server.o
g++ -c Client.cxx -o Client.o
g++ Server.o Socket.o -o サーバー
g++ クライアント.o ソケット.o -o クライアント

ありがとう!

Jon の推奨に従って、ソケット関数のドキュメントを調べたところ、エラー レポートが改善されました。'errno' 変数をチェックし、それに基づいて例外をスローします。(それと、ノンブロッキングに設定していません... ;) ) - 更新して感謝したかっただけです! :D

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

c - グローバル リンク リストに格納された (および他の関数でアクセスされた) ローカル構造体は、VC2010 で機能します。これは正しい C99/ANSI ですか?

次のコードは正常に動作します。

構造体は main 以外の関数でローカルに作成されますが、localstructtest() のスコープ外のリンク リストからデータを取得できました。ローカル変数はスタック上に作成されますが、これはこの構造体にも当てはまりますか? それとも実際にヒープ上に作成され、ポインター/参照は有効なままですか? テストしたとき、これはひどく失敗すると予想していました。私は C++ プログラマーであり、C に参照渡しがないことの影響をおそらく完全には理解していないことを認めます。このように構造体データを使用しても問題ない場合、データはいつ取得されますか?解放された?

ありがとう!

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

c - getaddrinfo addrinfo 結果はスタックまたはヒープ

少なくとも私は少し混乱しています。getaddrinfo() 呼び出しは addrinfo 構造体へのポインタを「更新」します。同じスコープ (その関数) で addrinfo を使用する場合はすべて問題ありませんが、構造体を別のものにコピーするとどうなりますか (それを割り当てることによって)。

進行中の基本を理解するのを手伝ってください(代替アプローチのアドバイスは求めていません)。

間違っていたら訂正してください: a) getaddrinfo() には addrinfo への構造体ポインタへのポインタが必要です。b) getaddrinfo は、現在の関数スコープで addrinfo 構造体を作成し、a) で必要なポインターを更新します。

ここで私の本当の質問: その addrinfo を別の場所に保存したいと思います。他のポインターへの代入を使用してもディープ コピーは実行されず、関数の後ですべてのポインターが無効になりますか?

非常に単純化された例を挙げてください。

問題が残っているため、getaddrinfo で &update を直接使用しても機能しないようです。元の構造体は関数スコープの終了後に破棄されます。

ここでより多くの洞察を得ることができる人は誰でも(何がどこで作成され、どこで破棄されるか、スタック、すべての情報をヒープすることを歓迎します)

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

.net - .NET で文字列を初期化する場合と初期化しない場合の違い

new キーワードを使用して文字列を初期化するとき、および new キーワードを使用せずに文字列に値を設定するときに、メモリがどのように割り当てられるかを知りたいです。

アビシェク・R・スリカント

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

.net - スタックとヒープビューア

スタックとヒープに割り当てられているタイプを表示する、.NET用の無料のスタックとヒープビューアはありますか。これは、これから行うトレーニングに必要です。

0 投票する
5 に答える
503 参照

memory - メモリ内のスタックは実際にスタックですか?

メモリには、スタックと呼ばれるセクションがあり、上部から始まり、ヒープに向かって下に成長します。このスタックは LIFO スタックと同じものですか? 一番下のヒープはFIFOですか?

「プッシュ」と「ポップ」を行うと、メモリ内のスタックが変更されますか?

0 投票する
5 に答える
1432 参照

c++ - C++ヒープメモリのパフォーマンスの向上

大量のヒープメモリが必要な関数を書いています。forパフォーマンスを向上させるために(コンパイルオプションなどを介して)、これらのデータが特定のループ内で頻繁にアクセスされることをコンパイラーに通知することは可能ですか?

スタックを使用できない理由は、格納する必要のある要素の数が多く、それを実行しようとするとセグメンテーション違反が発生するためです。

現在、コードは機能していますが、もっと速くなる可能性があると思います。

更新:私はこのようなことをしています

いくつかの詳細:
-hash_setを使用しましたが、シミュレーションの目的で使用しているすべてのマシンでhash_setが使用できるわけではないという事実に加えて、少し改善しました
-配列を使用してスタックにvecを割り当てようとしましたが、前述のように、次の場合にセグメンテーション違反が発生する可能性があります要素の数が多すぎます

node_vec.size()がたとえばkと等しい場合、kは数千のオーダーであり、vecはnode_vecの4倍または5倍大きいと予想されます。この桁数では、コードを何度も実行する必要があることを考えると、コードは遅いように見えます。もちろん、私はこれらの呼び出しを並列化するためにマルチスレッドを使用していますが、関数自体を現在表示されているものよりもはるかに高速に実行することはできません。

たとえば、高速データ検索などのために、vecをキャッシュメモリに割り当てることは可能でしょうか?

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

.net - スタックメモリの場所

ヒープメモリがRAMの一部であることは知っています。ただし、スタックメモリはRAMまたはスタックメモリの一部であり、CPUレジスタの一部です。.net4.0 アプリケーションのスタック メモリのデフォルト サイズは?

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

assembly - ポップするか、esp、4を追加しますか?違いはなんですか?

この質問を見ましたが、答えが見つかりませんでした..

では、 1 回または 2 回使用する代わりに、add esp, 4またはを使用することを好むのはなぜでしょうか。違い(パフォーマンス、安全性など)はまったくありますか、それとも個人的な選択の問題ですか?add esp, 8pop

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

performance - 再帰的実装と非再帰的実装の速度比較

本当に深い再帰を使用する複雑なアルゴリズムがあります。特定のデータでスタック オーバーフローが発生するため、再帰なしで (ヒープ上の外部スタックを使用して) 書き直そうとしました。したがって、同じアルゴリズムの 2 つの変更があります。次に、いくつかのテストを実行したところ、再帰的な実装は別の実装よりもはるかに高速であることがわかりました。

誰か説明してくれませんか?これらの結果を議論することは、私の最後の大学プロジェクトの一部です (なぜ、ある実装が別の実装よりも非常に高速なのか)。スタックとヒープのキャッシングが異なるためだと思いますが、よくわかりません。

どうもありがとう!


編集

はい、コードがあります。アルゴリズムは C++ で書かれており、ツリー同形問題を解決します。2 つのノードを比較する 1 つのメソッドを除いて、両方の実装は同じです。比較は再帰的に定義されます。あるノードの子の 1 つが別のノードの対応する子よりも小さい場合、そのノードは別のノードよりも小さくなります。

再帰バージョン

非再帰的な実装