Comment pouvez-vous trouver la taille maximale de la pile de mémoire pour un programme C ++ sous linux? (Compilateur GNU)

StackOverflow https://stackoverflow.com/questions/682444

  •  22-08-2019
  •  | 
  •  

Question

Je suis curieux de savoir comment savoir ce que la taille maximale de la pile est un combo compilateur / os particulier. J'utilise le compilateur Ubuntu / GNU. Quelques questions que j'ai en plus sont:

  1. Qui contrôle la taille maximale par défaut de la pile; OS ou compilateur?
  2. Le maximum par défaut mis à l'échelle en fonction de la mémoire totale? (Par exemple une machine à mémoire 2gb aurait plus grande taille par défaut qu'une machine avec seulement 512 Mo) Pour cet exemple, les deux machines sont les mêmes OS / configuration du compilateur, juste différentes quantités de mémoire vive du système.

Merci!

Était-ce utile?

La solution

  

Qui contrôle la taille maximale par défaut de la pile; OS ou compilateur?

Le compilateur en général. Le système d'exploitation / matériel ne limite dans une certaine mesure. Par défaut 8Mo sur IIRC linux. Pensez à ulimit -s sur Linux (pour changer la taille de la pile).

  

Le maximum par défaut mis à l'échelle en fonction de la mémoire totale? (Par exemple une machine à mémoire 2gb aurait plus grande taille par défaut qu'une machine avec seulement 512 Mo) Pour cet exemple, les deux machines sont les mêmes OS / configuration du compilateur, juste différentes quantités de mémoire vive du système.

Non. Tant que vous le faites yiurself.You peut modifier la taille de la pile via des commutateurs du compilateur.

ld --stack=<STACK_SIZE>

ou

gcc -Wl,--stack=<STACK_SIZE>
  

La prise de C ++ standard sur la question des piles et des tas:

La norme est basée sur une machine abstraite et ne se préoccupe pas vraiment avec du matériel ou des piles ou des tas. Il ne parler d'un magasin alloué et un magasin gratuit. Le magasin est libre où vous seriez si vous appelez nouveau (la plupart du temps). FWIW, une mise en œuvre peut avoir qu'une seule zone de mémoire se faisant passer à la fois comme pile et tas en matière de répartition objet.

Votre question, à cet effet, se résume à un problème spécifique de mise en œuvre plutôt que d'une question linguistique.

Hope this helps.

Autres conseils

Sous Linux (Ubuntu), système d'exploitation contrôle la taille maximale. Voir « limite de l'homme » ou « homme ulimit » pour référence.

De nos jours, la bonne question est: Quelle quantité de mémoire est allouée à mon fils Chaque thread obtient un montant qui en général, vous pouvez contrôler à temps thread-création

..

Pour répondre à la partie 1, le compilateur / thread système doit choisir, bien que certains systèmes d'exploitation ont (historiquement) avait des limites.

Pour 2, non ce ne sont pas mis à l'échelle.

Il n'y a aucun moyen de le faire portably -. La norme C ++ ne nécessite pas réellement une pile

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top