3

StackOverflowErrorいくつかの単純なツリー/グラフ アルゴリズムを作成しましたが、非常に小さなデータで多くの例外がすぐに発生しました。2GB の RAM を搭載した私の Samsung Galaxy S3 では、デフォルトでスタックが 8KB であることがわかりました。10 年前の私のコンピューターには 1MB のスタックがありました。私が現在使用している Linux マシンには 4GB の RAM が搭載されています。私の携帯電話の RAM は、コンピューターの RAM の半分のサイズにすぎませんが、私の携帯電話のスタックは 1000 分の 1 以上小さいです。なんで?

Android の開発者が他のオペレーティング システムよりもはるかに多くのスタックを制限しなければならなかった実際の技術的な理由は何ですか? たとえば、一部の Android デバイスには 1MB や 10MB などの少量の RAM しか搭載されていないためですか? デバイスの範囲を調査したことはありませんが、デバイスがこれほど小さいとは信じがたいと思います。

4

1 に答える 1

0

Thread必要なスタック サイズで を作成し、その中でコードを実行するだけです。

デフォルトのものは、8KBおそらくヒープに割り当てられているという事実によるものであり、32ビットアーキテクチャには無駄にするVRAMがあまりないためだと思います(2GBのメモリ分割では、プロセスごとに2GBしかありません利用可能)。大きなスタックを割り当てると、プロセスの使用可能な VRAM から永久に取り除かれます。これは、スタックが上から下に成長し、ヒープが下から上に成長する従来のネイティブ プロセスとは異なります。

于 2013-08-13T20:55:09.163 に答える