cs_Mamelook
Messages postés48Date d'inscriptionjeudi 10 juillet 2003StatutMembreDernière intervention27 juillet 2008
-
27 juil. 2008 à 01:22
cs_Mamelook
Messages postés48Date d'inscriptionjeudi 10 juillet 2003StatutMembreDernière intervention27 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 ...
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 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.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201013 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.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 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.