2009-10-18 11 views
1

J'ai déclaré et initialisé un tableau ayant [100] [1000] [1000] éléments char (100MB), il n'a pas été question d'un débordement de pile à la première fois.Mais quand je cours Après un certain temps, il lance une exception de dépassement de pile! J'ai augmenté la taille de la réserve de stockage à 200 000 000 dans le projet options-> linker-> système, mais cela n'a pas fonctionné! Je travaille en utilisant Ram 2 Go. Comment puis-je éviter la pile sur le flux.Débordement de pile C++ - Visual Studio 2008

Répondre

8

Arrêtez d'utiliser la pile! Utilisez la mémoire de tas!

+3

D'accord. 100 Mo sur la pile est assez absurde. Et je pensais que j'étais mauvais pour utiliser plus d'une page ... – asveikau

+1

Utilisez "Free Store" plutôt que d'utiliser Heap –

1

Y a-t-il une raison pour laquelle vous avez besoin d'allouer autant de mémoire de pile? C'est probablement une carence dans votre algorithme - pas une lacune avec le compilateur.

0

La taille de pile par défaut n'est pas une option de lien, mais est contrôlée par un certain nombre de mécanismes spécifiques à la plate-forme ésotérique.

Sous Windows, cela peut être contrôlé lorsque vous appelez CreateThread. Il existe également des mécanismes pthread attr pour faire cela sur Unix.

Dans le code non-threaded, sous Unix, il existe des paramètres ulimit qui contrôlent cela, mais ils peuvent être limités par les limites de la plate-forme. Par exemple, sur AIX dans les processus 32 bits, pile et tas croissent ensemble dans le second segment, vous avez donc un maximum de 256 Mo pour les deux (et beaucoup de plaisir une fois qu'ils sont touchés).

Il peut y avoir des mécanismes de plate-forme que vous pouvez utiliser pour contrôler ceci (comme ulimit), mais la suggestion d'utiliser le tas est probablement prudente.