技術共有

Android のスレッドのスタックはどれくらいの大きさですか?どこに設定されていますか?

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Android では、スレッドのスタック サイズは、Android のバージョンやスレッド タイプ (メイン スレッドと子スレッドなど) によって異なります。以下は、Android のスレッド スタックのサイズとその設定方法に対する詳細な回答です。

スレッドスタックサイズ

  1. メインスレッドのスタックサイズ
    • デフォルトでは、Android メインスレッドのスタック サイズは通常、8MB 。これは、システムによってメイン スレッドに割り当てられる初期スタック領域であり、メソッド呼び出しプロセス、ローカル変数、オペランド スタックなどの情報を格納するために使用されます。
  2. 子スレッドのスタックサイズ
    • 子スレッドのスタック サイズは比較的小さく、具体的なサイズは Android のバージョンによって異なります。例えば、Android 6.0/7.0では、子スレッド(GUARD領域を含む)のスタックサイズは約1016KB; Android 8.0では、子スレッド(GUARD領域を含む)のスタックサイズは約1008KB; Android 9.0以降では、子スレッドのスタックサイズ(GUARD領域を除く)は約1008KBただし、mmap によって割り当てられる合計サイズ (STACK と GUARD を含む) は1012KBまたは1016KB

スレッドスタックサイズの設定

Android では、POSIX スレッド (pthread) ライブラリの関連関数を呼び出すことで、スレッドのスタック サイズを設定できます。 Android の基礎となるメカニズムの多くはこれらの言語に基づいているため、これらの関数は通常 C または C コードで使用されます。

  1. スレッドスタックサイズを設定する関数
    • pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize): この関数はスレッド属性オブジェクトを設定するために使用されます。attrスタックサイズstacksize
    • 使用中でpthread_createスレッドを作成する前に、次の呼び出しを行う必要があります。pthread_attr_initスレッドプロパティオブジェクトを初期化してから使用しますpthread_attr_setstacksizeスタック サイズを設定し、最後に set プロパティ オブジェクトを使用してスレッドを作成します。
  2. サンプルコード
     

    c

    #include