Taille maximum tableaux [Résolu]

Messages postés
34
Date d'inscription
jeudi 19 octobre 2006
Statut
Membre
Dernière intervention
13 juin 2007
- - Dernière réponse : BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
- 1 mars 2007 à 17:55
Hello,

Je développe avec Dev-CPP ; dans un programme en C, je devais créer de très gros tableaux (je n'ai plus la taille en tête, malheureusement) => impossible.

Pour y remédier, j'ai fait le même programme en .cpp, avec la commande "new" pour créer le gros tableau, et ça a marché.

D'où les questions :

- la taille maximum d'un tableau est-elle liée au C, ou au compilateur ?
- y'a-t-il une commande permettant de connaître cette taille ?
- pourquoi le même programme écrit en .cpp a-t-il marché avec la commande "new" ?

Merci à tous et vive le sport
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
3
Merci
La taile maxi est fonction de ce dont dispose le système au moment où on demande l'alloc dynamique.
Dans tous les cas sous Windows, c'est un peu moins de 2 Go sur Win32 et en teras sur Win64.

ciao...
BruNews, MVP VC++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 153 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
3
Merci
char tab[xxx];
n'est pas une ALLOCATION mais une réservation sur la pile (sub esp, xx) et comme tu dépasses de très loin la taille de la pile c'est badaboum.

Prends par habitude demander une alloc mémoire au dessus de 2Ko, ça évite tout problème.

ciao...
BruNews, MVP VC++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 153 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
34
Date d'inscription
jeudi 19 octobre 2006
Statut
Membre
Dernière intervention
13 juin 2007
0
Merci
Je ne comprends pas bien...

Mon allocation initiale était statique, i.e. "char tab[4000000000]" par exemple (me rappelle plus la taille) => plantage à l'exécution ; en faisant le même prog en .cpp avec "new tab[4000000000]" je crois, ça marchait bien.

J'ai compris ta réponse à propos de l'alloc dynamique ; mais pour l'allocation statique ? Le système ne travaille-t-il pas de la même manière ? Pourquoi dans un cas ça marche et pas dans l'autre ?

Et dans le cas de l'alloc statique, y ' a-t-il un moyen de connaître la taille max ?

Merci BRU
Commenter la réponse de yepla75
Messages postés
34
Date d'inscription
jeudi 19 octobre 2006
Statut
Membre
Dernière intervention
13 juin 2007
0
Merci
nickel ; pour finir, qu'entends-tu par pile(sub esp, xx) ? (sub esp, surtout)

merci
Commenter la réponse de yepla75
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
0
Merci
En fait, tu n'a pas le meme comportement, car en C tu fais une alloc statique et en C++ une alloc dynamique.

Si en C tu fais pas char tab[4000000000] mais
char * tab = (char*) malloc(sizeof(char)*4000000000) alors la tu auras le meme comportement qu'en C++.
Commenter la réponse de turnerom
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
0
Merci
c'est idem le comportement en C++ comme en C.

char sz[40];
dans une fonction sera sur pile que soit C ou C++.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews