Variables et mémoire vive

Résolu/Fermé
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 - 27 oct. 2009 à 18:19
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 - 30 oct. 2009 à 19:10
Bonjour,
je viens de lire que lorsqu'on crée des variables et qu'on leur attribue des valeurs cela s'effectue au niveau de la mémoire vive. Mais je ne comprend pas, parce que la mémoire vive est temporelle, elle s'efface dès qu'on eteint l'ordinateur. notre programme ne marchera plus après avoir éteint l'ordinateur. en tout cas, c'est ce que j'ai compri, j'espère que l'un d'entre vous connait la réponse, je lui serais très reconnaissante.
Aussi , une autre question, quand on déclare une variable, j'ai lu qu'avant qu'on lui attribue une valeur, elle prend la valeur de la variable qui était à l'endroit où notre nouvelle variable est en ce moment, mais alors dans ce cas, si on a un programme qui depend de l'ancienne variable, il ne fonctionnera plus.

je suis peut être bête, :) mais aidez moi svp
A voir également:

3 réponses

Salut,
Oui, avec les langages de programmation "traditionnels" une variable est toujours créée en mémoire vive. Et oui, dès que tu auras éteint ton ordi ta variable n'existera plus ni même ton programme d'ailleurs.
Si tu as enregistré ton programme sur une mémoire non volatile genre un support magnétique ou une clé usb, tu pourras réutiliser ton programme.
La valeur précédente de la variable est effectivement perdue sauf si elle aussi est écrite sur une mémoire non volatile (le plus courant étant dans un fichier). Il suffit alors de rajouter au programme une section "récupération des variables précédemment calculées" et le tour est joué.
J'espère que ça répond à ta question
0
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 1
27 oct. 2009 à 19:57
Il suffit donc d'enregistrer le programme tapé dans l'IDE et là, les varibles gardent leurs valeurs et leur place dans la mémoire ne peut plus être occupée par une autre variable?? quand on enregistre, on se deplace de la mémoire vive au disque dur?? j'espère que j'ai bien compri :)
0
Salut,

Pour faire simple, on va dire que c'est l' OS (operating System) qui gère la RAM (mémoire vive).
Quand on exécute un programme, l'OS le charge en mémoire et lui reserve de la place pour travailler.
C'est le programme qui détermine combien d'espace il à besoin; s'il y a assez de RAM libre, l'OS la lui alloue exclusivement. Si un autre prog essaie d'ecrire à cet endroit l'OS l'arrête. Enfin c'est un peu plus compliqué, mais normalement il n'y a pas d'allocation du meme espace RAM a plusieurs progs en meme temps.

Donc en principe il n'y a pas de risque qu'un prog vienne écraser les données d'un autre prog.

A+.
0
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 1
27 oct. 2009 à 20:01
ah ! je vois ! merci :)
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
28 oct. 2009 à 10:17
quand tu dis "prend la valeur de la variable qui était à l'endroit où notre nouvelle variable est en ce moment", en fait, ca veut dire que tant que tu n'as pas toi même initialisé la variable dans ton programme, sa valeur est aléatoire. Avec certains langage, quand tu crées une variable, il lui attribue une valeur par défaut. En C/C++ par exemple, quand tu crées une variable, tu dois ensuite toi même lui attribuer sa valeur (si tu ne le fais pas, le compilateur te met un warning, disant que t'utilises une variable sans l'avoir initialisé.

quand tu étiends l'ordi, le programme s'arrête. si tu veux conserver certaines données, il faut installer une procedure de sauvegarde dans ton programme. Tu as plusieurs possiblilités, suivant ce que tu fais:
- fichiers
- base de données
- base de registres windows
- et surement plein d'autres qui sont moins courantes (serveur dédié par exemple)...

au redémarrage de l'application,, tu devras aller charger la valeur de ces variables là ou tu les as enregistré
0
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 1
28 oct. 2009 à 15:28
comme je suis nouvelle en programmation en C, je viens de debuter il y a deux jours.j'ai fait ce petit proramme; j'ai declaré la variable "lin", sans lui attribuer une valeur, et lorsque j'ai lancé le programme, il s'est avéré qu'elle a deja une valeur.elle a pris la valeur se trouvant dans la case mémoire qu'elle occupe.mai je me demande si cela ne nuiera pas au fontionnement de l'ordi.
je crois que j'ai trouvé une explication. quand on enregistre un programme, les cases où ses variables sont enregistrées deviennent inaccessibles par d'autres variables?

qui peut me dire si j'ai tort ou pas? :)



mon petit proramme :p

int main()
{
double lin;
printf("lin = %d", lin);

}


et quand je lance, je trouve
lin = 4199216
0
pacorabanix > seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009
28 oct. 2009 à 18:34
oui ça ressemble à ce que tu dis.

MAis c'est pas parceque tu écris un prog C avec une variable que windows met un drapeau dans ta mémoire en disant "attention ! cette case mémoire est définitivement pour le petit programme que tu as fait".

L'allocation de mémoire se fait au démarrage, lorsque tu le lances. Le programme demande à Windows d'allouer de l'espace mémoire pour les variables déclarées.

Tout est fait relativmeent proprement en général.

Si tu veux savoir "où" dans la mémoire (à quelle adresse) ta variable est stockée tu peux afficher la valeur de &lin (Avec le & c'est l'adresse de la variable), mais tu n'en as jamais besoin normalement, c'est juste pour te montrer.

A chaque fois que tu lances le programme cette adresse peut changer.

Et oui, en effet, vu que dans la mémoire y'a plein de bordel, il y a une valeur qui était déjà là, et c'est celle qu'affiche ton printf.

Mais ça n'a rien de dangereux. Windows sait que cette adresse est utilisée par ton programme, ce n'est pas parce que tu changes cette valeur que tu vas avoir des bugs dans ton système, rassures toi, Windows est là pour ça ;). Windows ne peut pas allouer une adresses mémoire pour deux choses à la fois. Ce qui est dans cette case est utilisé par ton programme et c'est tout (aussi longtemps qu'il tourne).
0
pacorabanix > pacorabanix
28 oct. 2009 à 18:39
en fait, je comprends un peu mieux ta question de départ.

L'histoire des variables, c'est la manière de représenter les besoins du programme.

Lorsque tu enregistre un programme sur le disque, tu enregistres les INSTRUCTIONS, c'est tout.

Par exemple, si dans mon programme j'ai 1 million de variables int, vu que chaque int fait normalement 16 octets je crois (ça dépend ton ordi et ton compilateur), mon programme aura besoin de 16 MégaOctets (Mo) de mémoire pour tourner.

Mais le programme sur le disque, c'est juste les instruction compilées (=traduites pour l'ordinateur) qui sont dedans, pas le contenu de ces variables.

Un programme va demander l'allocation de mémoire dans son code compilé. Lorsqu'il est lancé il demandera "Hey Windows mon pote, tu me fais une petite place s'il te plait ?".


Je crois que tu confondais le code de ton programme, et ses données (le contenu et l'utilisation des variables)
0
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 1 > pacorabanix
30 oct. 2009 à 19:10
c vrai, je confondai code et contenu. maintenant c plus clair. merciiiiiiiii
0