Por ejemplo, en OSX, es incluso menos de 512k.
¿Hay algún tamaño recomendado, teniendo en cuenta, que la aplicación no utiliza la recursividad y no asigna muchas variables de pila ?
Sé que la pregunta es demasiado amplia y depende en gran medida del uso, pero aún quería preguntar, ya que me preguntaba si hay alguna razón oculta / interna / del sistema detrás de este gran número.
Me preguntaba, ya que tengo la intención de cambiar el tamaño de la pila a 512 KiB en mi aplicación, esto todavía suena como un gran número para esto, pero es mucho más pequeño que 8MiB, y conducirá a una memoria virtual significativamente disminuida del proceso, ya que tener muchos hilos (E / S).
También sé que esto realmente no duele, bien explicado aquí : tamaño de pila predeterminado para pthreads
fuente
Respuestas:
Como han dicho otros, y como se menciona en el enlace que proporciona en su pregunta, tener una pila de 8MiB no hace daño (aparte de consumir espacio de direcciones, en un sistema de 64 bits que no importará).
Linux ha usado pilas de 8MiB durante mucho tiempo; El cambio se introdujo en la versión 1.3.7 del núcleo, en julio de 1995. En aquel entonces se presentaba como un límite, anteriormente no había ninguno:
En Linux, el límite de la pila también afecta el tamaño de los argumentos del programa y el entorno, que están limitados a una cuarta parte del límite de la pila ; el núcleo impone un mínimo de 32 páginas para los argumentos y el entorno.
Para los subprocesos, si el límite de la pila (
RLIMIT_STACK
) es ilimitado,pthread_create
aplica sus propios límites a las pilas de los nuevos subprocesos, y en la mayoría de las arquitecturas, eso es menos de 8MiB.fuente
top
ignorémoslo por el momento) y se muestra con resultados VIRT atemorizantes. Aunque, cavando un poco más, la mayoría de este espacio de direcciones virtuales se toma de las arenas por hilo (memoria), no del tamaño de la pila, por lo que reducir el tamaño de la pila no reducirá drásticamente la memoria virtual. Tenía curiosidad por qué 8MiB y por qué tanto.top
le da una respuesta mucho mejor a "qué memoria está usando realmente este proceso" que VIRT.8 MB es el tamaño virtual de la pila. Se producirá un error de página cuando su aplicación intente usar más pila de la que está asignada físicamente actualmente. El manejador de fallas de la página del núcleo asignará una página física y luego su aplicación continuará.
Consulte /unix//a/280865/21212 para obtener una explicación completa.
Por lo tanto, reducir el tamaño de su pila no debería tener ningún efecto en la reducción del uso de memoria física de su aplicación.
fuente