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
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.
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 »
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]);
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.
Totalement @ votre deuxième paragraphe. (Bien que, pour des raisons similaires, je ne sais pas pourquoi quelqu'un utiliserait encore Windows Vista;) – Artelius
- 1. Comment augmenter la mémoire java dans openfire
- 2. Augmenter la mémoire du processus python au fil du temps
- 3. Augmenter la mémoire pour la mémoire partagée
- 4. Augmenter l'allocation de mémoire de Cygwin
- 5. Augmenter l'utilisation de la mémoire dans sqlite3?
- 6. Augmenter par programme les privilèges de l'utilisateur
- 7. Augmenter la capacité de mémoire de l'émulateur Android?
- 8. Comment conserver un programme RPG en mémoire?
- 9. mémoire programme Problème
- 10. Comment DOS charge un programme en mémoire?
- 11. Réduire l'empreinte mémoire des rails Mongrel et augmenter les performances?
- 12. Comment augmenter la vitesse de désérialisation?
- 13. Comment augmenter le plafond de taille de la mémoire tampon des requêtes RIA Services?
- 14. Puis-je augmenter un bouton onclick-area par programme?
- 15. Augmenter (ou diminuer) la mémoire disponible pour les processus R
- 16. C Carte de mémoire de programme
- 17. Fuite de mémoire dans le programme C++
- 18. Comment puis-je augmenter ma mémoire d'application, jusqu'à l'utilisation de la fonction VirtualAlloc, avec le WOW64?
- 19. Comment faire pour augmenter la taille de la mémoire physique dans Windows 7 OS 32 bits
- 20. Comment laisser un programme D lire un emplacement de mémoire dans la mémoire allouée à un programme A?
- 21. Comment écrire programme java pour augmenter la limite de fichier en utilisant ulimit
- 22. Comment augmenter la taille de la ligne de commande start run pour augmenter la cible
- 23. Comment accéder au ItemPanel par programme?
- 24. Fuite de mémoire au .csv téléchargement
- 25. Aide au débogage de la mémoire ObjC
- 26. Débogueur CLR, ASP.NET - comment augmenter le délai?
- 27. OutOfMemoryError quoi augmenter et comment?
- 28. Comment augmenter la mémoire allouée dans jvm pour les commandes Grails sur IntelliJ IDEA 9 Beta?
- 29. GridFS dans Ruby: comment augmenter?
- 30. Comment augmenter le pointeur mysql_fetch_array?
Ou un 'std :: vector (300 * 300 * 4)', ou un 'boost :: array , 300>, 4>' pour suggérer quelques C++ solutions. –
MSalters