問題タブ [stack-size]
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 - 安全なスレッドスタックサイズ?
かなりの数のスレッドを生成するコードを書いています (現時点では約 512 ですが、将来的にはさらに増える可能性があります)。各スレッドは少量の操作しか実行しないため、スレッドがシステムに与えるオーバーヘッドを最小限に抑えたいと考えています。
を使用してスタック サイズを設定しています。pthread_attr_setstacksize()
最小許容スタック サイズを から取得できますPTHREAD_STACK_MIN
。しかし、私の質問は次のとおりです。スレッドスタックサイズに使用しても安全ですか? PTHREAD_STACK_MIN
必要なスタックの量を計算するにはどうすればよいですか? 計算に追加する必要がある隠れたオーバーヘッドはありますか?
また、システムに対するスレッドの負担を軽減するために使用できる他の手法はありますか?
assembly - リアル モードでスタック セグメントを正しく設定しましたか?
ブートローダーを書いていて、スタックをそのようにセットアップしました...
これを行うことで、1024 バイトのスタック スペースを割り当てているのでしょうか? 0x00900 に他のものをロードするのは適切ですか? 0x00900 はスタック データの直後にあるはずです...
java - 64ビットLinuxでのJavaスレッドスタックサイズ
私の目標は、並行して実行できる最大スレッドの数値を考え出すことです。私はGoogleから多くのリンクを指摘されました。そこでは、RAM/StackSizeを分割することで簡単な計算ができます。64ビットLinuxでは、スレッドスタックサイズは10 MB(ulimit -s = 10240kb)と定義されており、RAMは4 GBで、OS用に1 GBを残し、この計算で300スレッド程度にすることができますが、テストアプリケーションは小さいです。書き込みは最大32297になり、メモリ不足エラーが発生します。
-Xssを使用してさまざまな値を試しましたが、これらの値はスレッド数にほとんど影響を与えません。〜32297のままです)。
これにより、スタックサイズは可変であり、OSによって決定され、必要に応じて定義された最大値に達するという印象を受けましたが、どこを読んでも、スタックサイズは静的です。
私がここで欠けているのは正確には何ですか?
java - Javaのスタック内の関数呼び出し数の制限はどのように定義されていますか?
私は最近、2000 の再帰関数呼び出しを含むディープ スタックを調べていましたが、Java のスタック内の関数呼び出しの数に制限がどのように定義されているのか疑問に思っていました。
c - ファイルまたはプロジェクト内のすべての関数のスタック サイズを C 言語で取得する方法はありますか?
スタック サイズが割り当てられたサイズよりも大きいすべての関数を取得したいのですが、提案する簡単な方法はありますか?
.obj ファイルを取得して逆アセンブルし、出力ファイルを分析しますか?
c - スタック オーバーフローが発生するまでの残りのスタックのサイズ
n
Linux では、C を使用して、配列に格納する必要がある要素の数を動的に決定したと仮定しint my_array[n]
ます ( 100 バイト)。
ほとんどn
は小さく、十分の一です。しかし、場合n
によっては 1000 または 1'000'000 という大きなものになることもあります。
n*o + p
スタックがオーバーフローせずにバイトを保持できるかどうかを計算するにはどうすればよいですか?
基本的に: スタックに残っているバイト数は?
c++ - Xcode 4.1でスタックサイズを増やす方法は?
問題は、コマンド ライン プロジェクト (c++) の配列の最大サイズが 32767 項目であるため、スタック サイズを増やしたいということです (なぜそのサイズの配列が必要なのか聞かないでください)。それよりも大きな「配列」を作成するために、mallocでポインターを作成しましたが、まったく同じです。そのため、スタックのサイズを増やす必要があります。. .
また、配列を 2 つに分割して行列を作成しようとしました (サイズが 10000 の配列を [100][100] の行列に変換し、ポインタを配列の先頭に設定してベクトルをエミュレートします)。これに関する問題はまったく同じで、32768 アイテムを超えようとするまで問題なく動作します。
(PS 解決策はこちら -> XCode でスタック サイズを増やす<-、しかし、Xcode 4.1 ではそのオプションが見つかりません)
前もって感謝します!!!
c - GCC が異なるスコープのローカル ユニオンに別々のスタック領域を割り当てるのはなぜですか?
次のコードを検討してください。
x86 用にそのままコンパイルすると (testme が構造体であることを意味します)、コンパイラが main に割り当てるスタック サイズは 16 バイトです。
ただし、ユニオンに定義された TRY (testme がユニオンであることを意味する) でコンパイルされた場合、コンパイラがメインに割り当てるスタック サイズは 32 バイトです。
さらに、追加のスコープで定義された構造体/共用体の追加のインスタンスは、共用体を使用するとより大きなスタック割り当てを生成しますが、構造体として使用するとスタック割り当てを拡大しません。
さて、これは意味がありません - 共用体は、同じフィールドを持つ構造体よりも少ないスタック スペースを取る必要があります。
GCC は、スコープが異なる場合でも共用体を同時に使用されるものとして扱うように見えますが、構造体に対しては同じことを行いません。
いくつかの詳細な説明:
volatile は、コンパイラが割り当てを最適化するのを止めるために使用されます。volatile を失い、最適化なしでコンパイルすると、同じ結果が得られます。
testme が共用体をメンバーの 1 つとして持つ構造体であっても、同じ動作が観察されます。言い換えれば、構造体のメンバーの 1 つが GCC の共用体であり、個別のスタック割り当てを行うことができれば十分です。
コンパイラは gcc バージョン 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ですが、他のアーキテクチャ用の他の GCC バージョンでも同じ動作を示しました。
checkstack.pl は、objdump の出力から、スタック (スタック ポインターのサブ) の割り当てに使用される命令を検索するだけです。
私の質問:
- なぜGCCはこれを行うのですか? これはバグですか、それともこの動作には理由がありますか?
- これがバグではないと仮定すると、これを回避し、GCC にユニオンと同じスタクトのスタックを強制的に割り当てる方法はありますか。
明確化:私の質問は、構造体または共用体のサイズがその部分のサイズよりも大きく見える理由ではありません。その理由は、位置合わせのためのパディングであることを理解しています。私の問題は、コンパイラが、異なるスコープで定義されているにもかかわらず、ユニオンの異なるインスタンスに複数のスタック フレームを割り当てることですが、同じフィールドを持つ構造体に対して同じことを行うべきではなく、実際には行いません。
ありがとう!
java - 実行時にJavaスレッドのスタックサイズを更新する
メインスレッドのスタックサイズを動的に(実行時に)増やす方法があるかどうか誰かが知っていますか?また、同じ質問だと思いますが、Thread
インスタンス化後にスタックサイズを増やしたり更新したりすることはできますか?
Thread
のCTORではスタックサイズを定義できますが、更新する方法が見つかりません。実際、JDKでスタックサイズの管理を見つけることができませんでした(これは不可能であることを示す傾向があります)。すべてがVMで行われます。
Java言語の仕様によれば、「スタックの作成時に」スタックサイズを設定することは可能ですが、次の点に注意してください。
Java仮想マシンの実装により、プログラマーまたはユーザーは、Java仮想マシンスタックの初期サイズを制御できます。また、Java仮想マシンスタックを動的に拡張または縮小する場合は、最大サイズと最小サイズを制御できます。
IMOはあまり明確ではありませんが、一部のVMは、特定の範囲内で進化する最大(編集)スタックサイズのスレッドを処理することを意味しますか?Hostpotでそれを行うことはできますか(Xss以外にスタックサイズに関連するオプションは見つかりませんでした)?
ありがとう !
mingw - 大きなプリコンパイル済みヘッダー ファイルを使用すると、cc1plus.exe がクラッシュする
MinGW でプリコンパイル済みヘッダー ファイルを使用すると問題が発生します。コンパイラはプリコンパイル済みヘッダー ファイルを見つけたようですが、cc1plus.exe は直後にクラッシュします (cc1plus.exe は動作を停止しました)。
これは cc1plus.exe のスタック サイズが小さいことに関連している可能性があることを理解したので、次のようにしてスタック サイズを増やしました。
そして私も無駄にしようとしました:
ただし、アプリケーションをコンパイルしようとするとクラッシュし続けるため、これは解決しませんでした。
ちなみに、私は最新の MinGw (gcc v 4.6.2) と最新の Eclipse CDT を使用しています。
cc1plus.exe のスタック サイズを正しく増やしていますか? 数え切れないほどの記事やトピックを読んでいるので、どうすればよいか手がかりを持っている人はいますか?
g++ は、私のプリコンパイル済みヘッダー ファイルを見つけて受け入れるようです。
.gch を生成するビルド前の make として実行する makefile は次のとおりです。
Ogre3D および CEGUI ヘッダーのほとんどをプリコンパイルしようとしているため、.gch のサイズは 169 MB を超えています。
ありがとう、アダム。