Taille du programme en fonction des variable ?

[Résolu]
Signaler
Messages postés
48
Date d'inscription
jeudi 10 juillet 2003
Statut
Membre
Dernière intervention
27 juillet 2008
-
Messages postés
48
Date d'inscription
jeudi 10 juillet 2003
Statut
Membre
Dernière intervention
27 juillet 2008
-
Bonjours, en envoyant mon programme a un de mes amis, j'ai remarqué que ce dernier (le programme) faisait 23,8 Mo, lorsque je le place dans une archive rar, l'archive mesure 20ko.
Quand je cherche dans mon programme ce qui peut être a l'origine de cette taille, (mon programme fait une centaine de ligne), je vois cette ligne :

char nfo_map[5000][5000] = {1};

Quand je remplace les 5000 par 500, le programme mesure alors 254ko...

Alors je voulais savoir si s'étai normal que les variable soit stoker dans l'exécutable (donc sur le disque dur) et pas dans la ram comme je croyais que s'étais le cas ...

Merci et a bientôt.

4 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Sans entrer dans les détails :
Une variable locale est placée sur la pile du programme. Cette pile est allouée par le système avant l'exécution. La variable est donc directement en mémoire.
Cependant, une variable globale est écrite dans le segment de donnée. Le segment de donnée est une des parties qui constitue le corps d'un programme. Elle est donc écrite sur le disque dur.
Cependant ne te trompe pas. Le programme doit être chargé en mémoire pour être exécuté, le segment de donnée y comprit. Les modifications sur ces variables sont bien faites en mémoire.

C++ (@++)<!--
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Ce qui est important de noter ici, c'est que pour les déclarations de tableaux, si tu ne déclares pas tous les éléments, ils sont implicitements mis à 0. C'est pour ca que la taille de ton exécutable augmente, même si tu ne spécifies la valeur que d'un élément.
Le mieux ici est donc de déclarer sans initialiser, puis d'utiliser par exemple memset pour initialiser ton tableau.

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
J'ai oublié de préciser qu'il faut que la variable globale soit initialisée (tableau ou pas) dès sa déclaration pour qu'elle soit placé à même le programme. Sinon, le programme ne fait que "demander" un espace mémoire plus grand pour contenir cette variable.

C++ (@++)<!--
Messages postés
48
Date d'inscription
jeudi 10 juillet 2003
Statut
Membre
Dernière intervention
27 juillet 2008

Oki merci, donc c'était bien normal ^^
Encor merci et a bientot ++