Bonjour,
Je souhaite connaître la taille maximale de argv dans le main. Ou peut-être, savez-vous où cette taille est définie dans le compilateur gcc sous linux.
Merci de répondre à cette question. javascript:emoticon(%27%3A)%27)
Sébastien Nicaisse.
Bonjour,
Je souhaite connaître la taille maximale de argv dans le main. Ou peut-être, savez-vous où cette taille est définie dans le compilateur gcc sous linux.
Merci de répondre à cette question. javascript:emoticon(%27%3A)%27)
Sébastien Nicaisse.
Je ne crois pas que ce que je vais te dire répondra à ta question car je pense que tu cherches quelque chose de plus complexe!
int main(int argc,char** argv,char**envp)
Ton tableau d'arguments est donc limité par la taille argc, mais aussi et je pense que c'est ce que tu recherches par une limite mémoire (mais c'est pas indiqué dans le livre, et j'ai pas pu trouvé d'info).Bjarne Stroustrup:\n
Par convention le tableau ARGV[] contient (argc+1) éléments et le dernier étant le pointeur NULL.
A plus tard!
D'aprés mes divers expériences, la somme de la taille des différents arguments ne doit pas dépasser une taille maximale . Mais, j'ai du mal à l'estimer. De plus, je pense que cette taille doit être définie quelques part dans le compilateur ou dans l'OS.
Peut-être connaissez vous une doc détaillée du compilateur gcc ?
merci de répondre à cette question.
seb
paix et félicité,
j'ai vaguement entendu un jour un des mes profs parler de la taille maximale des tableaux, et si mes souvenirs sont bons, il s'agissait de 64Ko. A vérifier.
J'ai réfléchi un peu à ton problème et je crois apporter un début de solution
ARGV est un tableau de argc+1 éléments
or argc est un entier , il est codé sur 4 octets ce qui signifie qu'un tableau
ne peut avoir plus de 2^32 éléments+1.
Par ailleurs j'ai trouvé ca sur un site:
http://www-ipst.u-strasbg.fr/ipst/deug-ti/aide-c/tab-mult.htm.Il faut souligner qu'il n'y a aucune limite sur le nombre d'indices d'un tableau. La seule limite est celle de l'espace mémoire disponible
J'espere que ce message a pu t'apporter des précisions
A priori c'est ARG_MAX (ca depend donc du systeme). C'est une macro ou tu peux l'avoir grace a sysconf(_SC_ARG_MAX).Envoyé par Nicaisse
Sources : http://www.in-ulm.de/~mascheck/various/argmax/ , man sysconf.
ces limites sont mal definies...
d'abord il y a la limites du nombre d'arguments, qui est forcement inferieur au max d'un entier (ca fait encore bcp)
mais a mon avis la vrai limite se trouve plutot au niveau du shell, car c'est lui qui limite la taille de la ligne qui est passée en commande... et cette limite là se trouverai entre 255octets pour du Dos et quelque chose comme 64 ko pour un ksh il me semble...
Apparemment c'est moins que 64Ko avec csh. La variable ARG_MAX n'indique pas ce que je cherche. Gandalf a sans doute raison la réponse doit se trouver dans la configuration du shell. Je vais chercher dans ce sens.
issu de man csh :
issu d'un autre systeme :Words can be no longer than 1024 bytes. The system limits
argument lists to 1,048,576 bytes. However, the maximum
number of arguments to a command for which filename expan-
sion applies is 1706. Command substitutions may expand to no
more characters than are allowed in the argument list. To
detect looping, the shell restricts the number of alias sub-
stitutions on a single line to 20.
Words can be no longer than 1024 characters.
The system limits argument lists to 10240 characters.
The number of arguments to a command which involves file*
name expansion is limited to 1/6th the number of charac*
ters allowed in an argument list.
Command substitutions may substitute no more characters
than are allowed in an argument list.
To detect looping, the shell restricts the number of alias
substitutions on a single line to 20.
Ok, merci à toutes les personnes qui m'ont aidé.
Partager