2010-06-12 3 views
5

Lorsque j'essaie d'initialiser un tableau 3D de taille 300 * 300 * 4 dans un programme C, mon programme s'arrête et signale une erreur de débordement de pile. Le système que j'utilise a 3 Go de RAM, ce qui devrait suffire. Est-il possible d'augmenter la mémoire allouée à un programme? J'utilise Dev C++ sur Windows Vista.Comment augmenter l'allocation de mémoire au programme

Répondre

11

soit utiliser malloc()/free() (ou new[]/delete[] C++), ou un réseau global, ou un tableau statique local. Si vous essayez de créer un tableau non statique dans une fonction, il est alloué sur la pile et les piles ne sont généralement pas très volumineuses.

Vous pouvez également essayer d'initialiser le tableau à l'envers; certains systèmes d'exploitation développent la pile de façon dynamique à mesure que les fautes de page se produisent, et puisque sur x86 la pile croît numériquement vers le bas, l'initialisation en arrière peut aider.

+1

Ou un 'std :: vector (300 * 300 * 4)', ou un 'boost :: array , 300>, 4>' pour suggérer quelques C++ solutions. – MSalters

3

Vous devez augmenter la quantité d'espace de pile que votre programme peut utiliser.

Vous pouvez définir la taille maximale de la pile dans les propriétés de dialogue sous de « Linker | Système | Taille Réserve Stack »

2

Même si vous avez 3 Go de RAM, la taille de la pile est limitée par le système d'exploitation et est généralement petit, car les grandes structures comme celle-ci sont probablement allouées sur le tas, pas la pile. Comme vous utilisez C++, maybe you could use Boost?

boost::multi_array<int, 3> x (boost::extents[300][300][4]); 
2

Comme vous utilisez DevC++, probablement que vous utilisez le compilateur gcc et via ce l'éditeur de liens ld. L'éditeur de liens possède une option -stack stacksize qui vous permet de contrôler la quantité de mémoire allouée à la pile. Comment vous allez faire cela à partir de DevC++ Je ne sais pas. Je ne sais pas non plus pourquoi quelqu'un utiliserait DevC++ du tout - il est buggé et n'est plus développé. Vous devriez envisager de passer à un meilleur IDE - Code::Blocks vient d'avoir une nouvelle version majeure, est supérieur à DevC++ à tous égards, et vient avec un compilateur C++ beaucoup plus moderne.

+1

Totalement @ votre deuxième paragraphe. (Bien que, pour des raisons similaires, je ne sais pas pourquoi quelqu'un utiliserait encore Windows Vista;) – Artelius

Questions connexes