Par exemple, sur OSX, c'est encore moins de 512k.
Y a-t-il une taille recommandée, compte tenu du fait que l'application n'utilise pas la récursivité et n'alloue pas beaucoup de variables de pile ?
Je sais que la question est trop large et dépend fortement de l'utilisation, mais je voulais tout de même demander, car je me demandais s'il y avait une raison cachée / interne / système derrière ce nombre énorme.
Je me demandais, car j'ai l'intention de changer la taille de la pile à 512 Ko dans mon application - cela semble toujours être un nombre énorme pour cela, mais il est beaucoup plus petit que 8 Mo - et entraînera une diminution significative de la mémoire virtuelle du processus, car je avoir beaucoup de threads (E / S).
Je sais aussi que cela ne fait pas vraiment de mal, bien expliqué ici : Taille de pile par défaut pour pthreads
la source
Réponses:
Comme d'autres l'ont dit, et comme mentionné dans le lien que vous fournissez dans votre question, avoir une pile de 8 Mo ne fait rien de mal (à part consommer de l'espace d'adressage - sur un système 64 bits qui n'a pas d'importance).
Linux utilise des piles de 8 Mo depuis très longtemps; la modification a été introduite dans la version 1.3.7 du noyau, en juillet 1995. À l'époque, elle était présentée comme introduisant une limite, auparavant il n'y en avait pas:
Sous Linux, la limite de pile affecte également la taille des arguments du programme et l'environnement, qui sont limités au quart de la limite de pile ; le noyau applique un minimum de 32 pages pour les arguments et l'environnement.
Pour les threads, si la limite de pile (
RLIMIT_STACK
) est illimitée,pthread_create
applique ses propres limites aux piles de nouveaux threads - et sur la plupart des architectures, c'est moins de 8 Mo.la source
top
montre des résultats VIRT effrayants. Bien que, en creusant un peu plus, la majorité de cet espace d'adressage virtuel provient des arènes par thread (mémoire), pas de la taille de la pile, donc réduire la taille de la pile ne réduira pas considérablement la mémoire virtuelle. J'étais juste curieux de savoir pourquoi 8 Mo et pourquoi autant.top
vous donne une bien meilleure réponse à "quelle mémoire ce processus utilise-t-il réellement" que VIRT.8 Mo est la taille virtuelle de la pile. Une erreur de page se produit lorsque votre application essaie d'utiliser plus de pile que ce qui est actuellement physiquement alloué. Le gestionnaire de défauts de page du noyau se verra alors alloué une page physique , puis votre application continuera.
Voir /unix//a/280865/21212 pour une explication complète.
La réduction de la taille de votre pile ne devrait donc avoir aucun effet sur la réduction de l'utilisation de la mémoire physique de votre application.
la source