Compartilhamento de tecnologia

Qual é o tamanho da pilha de um thread no Android? Onde está definido?

2024-07-11

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

No Android, o tamanho da pilha de um thread pode variar dependendo das diferentes versões e tipos de thread do Android (como thread principal versus thread filho). A seguir está uma resposta detalhada sobre o tamanho de uma pilha de threads no Android e como configurá-la:

Tamanho da pilha de threads

  1. Tamanho da pilha do thread principal
    • Por padrão, o tamanho da pilha do thread principal do Android geralmente é8MB . Este é o espaço de pilha inicial alocado pelo sistema para o thread principal, que é usado para armazenar informações como o processo de chamada de método, variáveis ​​locais e pilhas de operandos.
  2. Tamanho da pilha de threads filho
    • O tamanho da pilha do thread filho é relativamente pequeno e o tamanho específico depende da versão do Android.Por exemplo, no Android 6.0/7.0, o tamanho da pilha de um thread filho (incluindo a área GUARD) é aproximadamente1016 KB;No Android 8.0, o tamanho da pilha do thread filho (incluindo a área GUARD) é aproximadamente1008 KB; No Android 9.0 e superior, o tamanho da pilha do thread filho (excluindo a área GUARD) é aproximadamente1008 KB, mas o tamanho total alocado pelo mmap (incluindo STACK e GUARD) é1012 KBou1016 KB

Definir tamanho da pilha de threads

No Android, você pode definir o tamanho da pilha do thread chamando as funções relevantes da biblioteca de threads POSIX (pthread). Essas funções geralmente são usadas em código C ou C, porque muitos dos mecanismos subjacentes do Android são baseados nessas linguagens.

  1. Função para definir o tamanho da pilha de threads
    • pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize): Esta função é usada para definir o objeto de atributo do threadattrtamanho da pilha emstacksize
    • Em usopthread_createAntes de criar um tópico, você precisa ligarpthread_attr_initInicialize o objeto de propriedades do thread e usepthread_attr_setstacksizeDefina o tamanho da pilha e, finalmente, crie um thread usando o objeto de propriedade set.
  2. Código de amostra
     

    c

    #include