La taille maximum d'un tableau en C ? - C++ - Programmation
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)
Marsh Posté le 14-06-2003 à 11:38:29
++Taz a écrit : |
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 .
LeGreg
Marsh Posté le 14-06-2003 à 11:48:58
legreg a écrit : |
Encore faut-il savoir que quand tu fais "double t[512][512];", ça l'alloue sur la pile...
Marsh Posté le 14-06-2003 à 11:51:18
Tetragrammaton IHVH 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
Marsh Posté le 14-06-2003 à 11:55:47
legreg 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.
Marsh Posté le 14-06-2003 à 11:56:54
Tetragrammaton IHVH a écrit : |
ah ben ca va aller loin cette discussion...
LeGreg
Marsh Posté le 14-06-2003 à 12:00:31
legreg a écrit : |
note qu'elle a été rallongée grâce à ton intervention
Marsh Posté le 14-06-2003 à 12:03:21
Tetragrammaton IHVH a écrit : |
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
Marsh Posté le 14-06-2003 à 12:06:24
legreg a écrit : |
si tu n'as pas compris la question de getafix, c'est pas une raison pour t'en prendre à moi (toujours avoir son dico newb-français sous la main )
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
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 )
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 ) |
tas
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 ?
Marsh Posté le 14-06-2003 à 14:40:17
malloc/new/delete/free
Marsh Posté le 14-06-2003 à 14:41:44
Tetragrammaton IHVH a écrit : malloc/new/delete/free |
quand on fait tab[100], c'est alloué dans la pile alors ?
Marsh Posté le 14-06-2003 à 14:43:22
"Dans le topic est contenue la réponse"
Marsh Posté le 14-06-2003 à 14:50:51
Tetragrammaton IHVH a écrit : "Dans le topic est contenue la réponse" |
pour ces eclaircissements.
je croyais que c'était kifkif.
Marsh Posté le 14-06-2003 à 18:45:50
Tetragrammaton IHVH a écrit : |
Meme si t est une variable globale?
Marsh Posté le 14-06-2003 à 18:47:53
Ace17 a écrit : |
Combien de fois faudra-t-il le répéter ?
"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"
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:)
Marsh Posté le 14-06-2003 à 21:30:19
Tetragrammaton IHVH a écrit : |
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
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
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
Marsh Posté le 14-06-2003 à 21:40:26
xav14 a écrit : |
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
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
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 ?
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....
Marsh Posté le 16-06-2003 à 16:47:06
tu sais ce que sais qu'une variable globale statique? un fonction déclarée statique?
Marsh Posté le 16-06-2003 à 16:50:51
Avais tu mentionné le mot "statique"? Je ne crois pas...
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 |
Marsh Posté le 16-06-2003 à 16:59:06
ah merde sorry:D, j'avais pas tout lu:p... dans ce cas ok...
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 ?