Taille du programme en fonction des variable ?

Résolu
cs_Mamelook Messages postés 48 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 27 juillet 2008 - 27 juil. 2008 à 01:22
cs_Mamelook Messages postés 48 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 27 juillet 2008 - 27 juil. 2008 à 20:21
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 juil. 2008 à 05:16
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++ (@++)<!--
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
27 juil. 2008 à 14:24
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
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 juil. 2008 à 16: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++ (@++)<!--
3
cs_Mamelook Messages postés 48 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 27 juillet 2008
27 juil. 2008 à 20:21
Oki merci, donc c'était bien normal ^^
Encor merci et a bientot ++
0