Taille maximum tableaux

Résolu
yepla75 Messages postés 34 Date d'inscription jeudi 19 octobre 2006 Statut Membre Dernière intervention 13 juin 2007 - 1 mars 2007 à 15:26
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 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

6 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 mars 2007 à 15:34
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++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 mars 2007 à 16:43
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++
3
yepla75 Messages postés 34 Date d'inscription jeudi 19 octobre 2006 Statut Membre Dernière intervention 13 juin 2007
1 mars 2007 à 16:14
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
0
yepla75 Messages postés 34 Date d'inscription jeudi 19 octobre 2006 Statut Membre Dernière intervention 13 juin 2007
1 mars 2007 à 17:19
nickel ; pour finir, qu'entends-tu par pile(sub esp, xx) ? (sub esp, surtout)

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
1 mars 2007 à 17:43
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++.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 mars 2007 à 17:55
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++
0
Rejoignez-nous