Taille maximum tableaux [Résolu]

yepla75 34 Messages postés jeudi 19 octobre 2006Date d'inscription 13 juin 2007 Dernière intervention - 1 mars 2007 à 15:26 - Dernière réponse : BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention
- 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
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 1 mars 2007 à 15:34
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++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de BruNews
Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 1 mars 2007 à 16:43
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++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de BruNews
yepla75 34 Messages postés jeudi 19 octobre 2006Date d'inscription 13 juin 2007 Dernière intervention - 1 mars 2007 à 16:14
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
yepla75 34 Messages postés jeudi 19 octobre 2006Date d'inscription 13 juin 2007 Dernière intervention - 1 mars 2007 à 17:19
0
Merci
nickel ; pour finir, qu'entends-tu par pile(sub esp, xx) ? (sub esp, surtout)

merci
Commenter la réponse de yepla75
turnerom 492 Messages postés samedi 10 juillet 2004Date d'inscription 12 janvier 2012 Dernière intervention - 1 mars 2007 à 17:43
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
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 1 mars 2007 à 17:55
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.