La taille maximum d'un tableau en C ?

La taille maximum d'un tableau en C ? - C++ - Programmation

Marsh Posté le 12-06-2003 à 12:21:55    

Ma question est simple, je sais qu'il y a une limite à la taille d'un tableau fixe en C, mais quelle est elle ?

Reply

Marsh Posté le 12-06-2003 à 12:21:55   

Reply

Marsh Posté le 12-06-2003 à 12:29:56    

ça dépend de ton système qui détermine la taille de ta pile
la norme ansi prévoit juste que la taille de la pile doit etre au moins de 0x3fff octets si je dis pas de conneries...
 
enrgèle générale,  
 
double t[512][512]; est une mauvaise idée (512*512*8 => 2Mo direct)

Reply

Marsh Posté le 14-06-2003 à 11:38:29    

++Taz a écrit :


double t[512][512]; est une mauvaise idée (512*512*8 => 2Mo direct)


 
Deux mega c'est pas beaucoup.
En plus je vois pas ou il a parlé d'allouer son tableau sur la pile ??
 
Sinon Get@Fix un tableau
est de la taille que tu veux en C, la norme ne prevoit rien
en general c'est la taille de la memoire de ton systeme
qui limite ce que tu peux allouer (plus les mecanismes d'extension de la memoire swappee depuis le disque dur). Evidemment il faut eviter d'allouer les gros tableaux sur la pile mais j'espere que personne n'aurait cette idee saugrenue :D.
 
LeGreg

Reply

Marsh Posté le 14-06-2003 à 11:48:58    

legreg a écrit :


 
Deux mega c'est pas beaucoup.
En plus je vois pas ou il a parlé d'allouer son tableau sur la pile ??


 
Encore faut-il savoir que quand tu fais "double t[512][512];", ça l'alloue sur la pile...


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 14-06-2003 à 11:51:18    

Tetragrammaton IHVH a écrit :


Encore faut-il savoir que quand tu fais "double t[512][512];", ça l'alloue sur la pile...


 
1- c'est Taz qui alloue des tableaux sur la pile
2- je vois pas les brackets de fonctions donc je peux pas en deduire dans quel pool il a alloue. Si c'est dans un corps de classe (ou de struct si on en en C), c'est encore moins clair.
3- quand je vois la question originale et vos deux reponses, je me dis: ok c'est une erreur de debutant d'allouer deux megas sur la pile mais c'est pas possible que deux programmeurs aussi experimentes pensent que ca puisse etre une demande legitime..
 
LeGreg


Message édité par LeGreg le 14-06-2003 à 11:53:03
Reply

Marsh Posté le 14-06-2003 à 11:55:47    

legreg a écrit :


 
1- c'est Taz qui alloue des tableaux sur la pile
2- je vois pas les brackets de fonctions donc je peux pas en deduire dans quel pool il a alloue. Si c'est dans un corps de classe (ou de struct si on en en C), c'est encore moins clair.
3- quand je vois la question originale et vos deux reponses, je me dis: ok c'est une erreur de debutant d'allouer deux megas sur la pile mais c'est pas possible que deux programmeurs aussi experimentes pensent que ca puisse etre une demande legitime..
 
LeGreg


 
dans le message de getafix : "une limite à la taille d'un tableau fixe en C" : en langage de newb, ça correspond à faire "double t[5000000];" et donc l'alouer sur la pile. Point barre.
 


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 14-06-2003 à 11:56:54    

Tetragrammaton IHVH a écrit :


dans le message de getafix : "une limite à la taille d'un tableau fixe en C" : en langage de newb, ça correspond à faire "double t[5000000];" et donc l'alouer sur la pile. Point barre.


 
ah ben ca va aller loin cette discussion...
 
LeGreg
 

Reply

Marsh Posté le 14-06-2003 à 12:00:31    

legreg a écrit :


 
ah ben ca va aller loin cette discussion...
 


 
note qu'elle a été rallongée grâce à ton intervention  [:xp1700]


Message édité par Tetragrammaton IHVH le 14-06-2003 à 12:06:41

---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 14-06-2003 à 12:03:21    

Tetragrammaton IHVH a écrit :


note qu'elle a été rallongée grâce à ton intervention [:xp1700]


 
perrsonnellement je pense que je suis le seul a avoir apporte une info interessante qui est qu'il n'y a pas de limitation de taille des tableaux liee a la norme du C.
 
Apres dire qu'un tableau est systematiquement alloué
sur la pile par un noob et "point barre" c'est vraiment loin d'etre constructif.
 
LeGreg

Reply

Marsh Posté le 14-06-2003 à 12:06:24    

legreg a écrit :


 
Apres dire qu'un tableau est systematiquement alloué
sur la pile par un noob et "point barre" c'est vraiment loin d'etre constructif.
 


 
si tu n'as pas compris la question de getafix, c'est pas une raison pour t'en prendre à moi [:spamafote] (toujours avoir son dico newb-français sous la main :D)


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 14-06-2003 à 12:06:24   

Reply

Marsh Posté le 14-06-2003 à 13:26:19    

euh j'espere que personne n'aura confondu tableau et pointeur
 
2 mo c'est enorme, la pile n'est pas faite pour ça,  sur mon système j'ai limit" la taille de la pile à 8Mo


Message édité par Taz le 14-06-2003 à 13:27:30
Reply

Marsh Posté le 14-06-2003 à 14:27:03    

c'est quoi qui est alloué dans la pile ? et c'est quoi l'autre endroit ou on peut allouer ? (desole j'ai pas de bouquin de C qui explique  [:proy])

Reply

Marsh Posté le 14-06-2003 à 14:36:58    

xav14 a écrit :

c'est quoi qui est alloué dans la pile ? et c'est quoi l'autre endroit ou on peut allouer ? (desole j'ai pas de bouquin de C qui explique  [:proy])


 
tas


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 14-06-2003 à 14:38:10    


 
(arf c'est vrai) et comment on sait si on alloue dans la pile ou dans le tas ?

Reply

Marsh Posté le 14-06-2003 à 14:40:17    

malloc/new/delete/free  :sarcastic:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 14-06-2003 à 14:41:44    

Tetragrammaton IHVH a écrit :

malloc/new/delete/free  :sarcastic:  


 
quand on fait tab[100], c'est alloué dans la pile alors ?  [:twixy]

Reply

Marsh Posté le 14-06-2003 à 14:43:22    

"Dans le topic est contenue la réponse"


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 14-06-2003 à 14:50:51    

Tetragrammaton IHVH a écrit :

"Dans le topic est contenue la réponse"


 
 
:jap: pour ces eclaircissements.
je croyais que c'était kifkif.


Message édité par xav14 le 14-06-2003 à 14:51:11
Reply

Marsh Posté le 14-06-2003 à 18:45:50    

Tetragrammaton IHVH a écrit :


 
Encore faut-il savoir que quand tu fais "double t[512][512];", ça l'alloue sur la pile...


Meme si t est une variable globale?

Reply

Marsh Posté le 14-06-2003 à 18:47:53    

Ace17 a écrit :


Meme si t est une variable globale?


 
Combien de fois faudra-t-il le répéter ?  :heink:  
 
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 14-06-2003 à 20:30:36    

c'est moi qui a dit ca l'autre jour, je voie que tu reprend ma phrase c'est style:)

Reply

Marsh Posté le 14-06-2003 à 21:30:19    

Tetragrammaton IHVH a écrit :


 
Combien de fois faudra-t-il le répéter ?  :heink:  
 
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
"Les variables globales c'est mal"
 


 
et les tableaux static on a le droit?
 
Et les tableaux membres d'une struct on a droit?
 
Et les tableaux membres static d'une classe (ok la c'est du C++) on a droit ?
 
LeGreg


Message édité par LeGreg le 14-06-2003 à 21:34:30
Reply

Marsh Posté le 14-06-2003 à 21:33:06    

l'avantage d'une tableau global
(oui j'en utilise) c'est qu'il
est alloué automatiquement a l'init
du programme et peut meme etre prerempli
avec des valeurs precises.
 
C'est comme ca qu'on peut inserer des ressources
complexes dans un programme en passant
par un compilateur de ressources par exemple.
(images, vertex shaders, etc..)
 
LeGreg

Reply

Marsh Posté le 14-06-2003 à 21:36:25    

les variables globales en C, c'est pas un problème, c'est meme conseillé quand on sait ce qu'on fait (je parle par exemple des varaibles static / privée à l'unité de compilation

Reply

Marsh Posté le 14-06-2003 à 21:40:26    

xav14 a écrit :


quand on fait tab[100], c'est alloué dans la pile alors ?  [:twixy]  


 
pas systematiquement meme si des gens te disent le contraire.
 
Ca depend du scope de la declaration
en general si c'est a l'interieur d'un bloc de fonction
la pile est mise a contribution.
 
Si c'est en dehors d'un bloc de fonction, le tableau
sera alloué dans le segment data du programme
(dont la duree de vie est egale a celle du programme).
 
Si c'est dans le corps d'une structure, le pool
d'allocation sera le meme que celui de la struct.
Si la struct est dans le pool data alors le tableau y sera,
si la struct est dans la pile alors le tableau y sera etc..
 
LeGreg

Reply

Marsh Posté le 14-06-2003 à 22:52:05    

si ça interesse quelqu'un j'ai une classe Array en partie repompée sur boost::array qui apporte un cht(i bout de métaprogrammation: en fonction de la taille du tableau (taille obtenue par sizeof), le tableau est soit implémentée en dur [N] soit par un appel à new

Reply

Marsh Posté le 14-06-2003 à 23:08:43    

Si c'est en dehors d'un bloc de fonction, le tableau
sera alloué dans le segment data du programme
(dont la duree de vie est egale a celle du programme).
 
(sous win32)
il me semblait que le segment de data etait de la mémoire allouée par le loader en lecture seule ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 16-06-2003 à 16:25:10    

++Taz a écrit :

les variables globales en C, c'est pas un problème, c'est meme conseillé quand on sait ce qu'on fait (je parle par exemple des varaibles static / privée à l'unité de compilation


 
C'est clairement à éviter comme l'a souligné tetra... dès que tu arrives à un soft à la taille plus que conséquente, c'est rapidement la merde....


---------------
Just drink it!
Reply

Marsh Posté le 16-06-2003 à 16:47:06    

:non: tu sais ce que sais qu'une variable globale statique? un fonction déclarée statique?

Reply

Marsh Posté le 16-06-2003 à 16:50:51    

Avais tu mentionné le mot "statique"? Je ne crois pas...


---------------
Just drink it!
Reply

Marsh Posté le 16-06-2003 à 16:54:23    

++Taz a écrit :

les variables globales en C, c'est pas un problème, c'est meme conseillé quand on sait ce qu'on fait (je parle par exemple des varaibles static / privée à l'unité de compilation


 

Reply

Marsh Posté le 16-06-2003 à 16:59:06    


 
ah merde sorry:D, j'avais pas tout lu:p... dans ce cas ok...


---------------
Just drink it!
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed