Обмен технологиями

Насколько велик стек потока в Android? Где он установлен?

2024-07-11

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

В Android размер стека потока может различаться в зависимости от разных версий Android и типов потоков (например, основного потока или дочернего потока). Ниже приводится подробный ответ о размере стека потоков в Android и о том, как его установить:

Размер стека потоков

  1. Размер стека основного потока
    • По умолчанию размер стека основного потока Android обычно равен8 МБ . Это начальное пространство стека, выделенное системой для основного потока, которое используется для хранения такой информации, как процесс вызова метода, локальные переменные и стеки операндов.
  2. Размер стека дочернего потока
    • Размер стека дочернего потока относительно невелик, а конкретный размер зависит от версии Android.Например, в Android 6.0/7.0 размер стека дочернего потока (включая область GUARD) составляет примерно1016КБ;В Android 8.0 размер стека дочернего потока (включая область GUARD) составляет примерно1008КБ; В Android 9.0 и выше размер стека дочернего потока (без учета области GUARD) равен примерно;1008КБ, но общий размер, выделенный mmap (включая STACK и GUARD), равен1012КБили1016КБ

Установить размер стека потоков

В Android вы можете установить размер стека потока, вызвав соответствующие функции библиотеки потоков POSIX (pthread). Эти функции обычно используются в коде C или C, поскольку многие базовые механизмы Android основаны на этих языках.

  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