Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/08/2014, à 13:09

Mr papier

Adresse des variables en mémoire

Bonjour,
dans les langages de programmation tel que le C ect... il y a des adresses aux variables. La question que je me pose est où sont stockées ces adresses car c'est justement grace à elles que l'ordinateur sait où est stocké une variable hmm .
Cordialement.

Hors ligne

#2 Le 15/08/2014, à 16:04

dfiad77pro

Re : Adresse des variables en mémoire

Vaste sujet tongue
matériellement c'est en mémoire vive ou simulacre, après dans les détails, il faut étudier la pagination et les algo de translation d'adresses ( logique physique)
passionnant mais pas simple...

il y a pleins de cours dispo sur le net si c'est ce que tu veut:

http://www.fil.univ-lille1.fr/~sedoglav … 04-2x3.pdf
http://libpfb.so/uploads/media/Systeme_ … tion_5.pdf

Dernière modification par dfiad77pro (Le 15/08/2014, à 18:10)

Hors ligne

#3 Le 15/08/2014, à 17:53

Mr papier

Re : Adresse des variables en mémoire

Merci pour les cours smile . Je suppose aussi que la traduction des op-codes ce fait par un système analogique d'algorithme et d'ouverture/fermeture de porte logique dans le processeur. N'est-ce pas? tongue.
Encore un grand merci.
PS: désolé de sortir un peu du sujet initial hmm .

Hors ligne

#4 Le 16/08/2014, à 09:26

alius

Re : Adresse des variables en mémoire

c'est le compilateur qui gère les adresses dans une table, ça fait comme une espèce de base de donnée d'adresses.
bien sur tout ça est en langage machine
par exemple quand tu écrit quelque chose du style

int a = 1;
int b = 2;

ça donne quelque chose du genre

movl $1, edx
mavl $2, edx + 8

ce qui veut dire qu'il range la valeur 1 dans le registre edx, puis qu'il range la valeur 2 dans edx+8 (fonctionne comme un pointeur)

bon c'est une caricature mais ça devrait t'aider à comprendre

Dernière modification par alius (Le 16/08/2014, à 09:29)


Alius

Hors ligne

#5 Le 16/08/2014, à 09:33

alius

Re : Adresse des variables en mémoire

le mieux pour comprendre comment ça fonctionne c'est d'écrire des programmes simple en C et de compiler avec gcc -S -o out.s code.cpp ce qui a pour effet de te donner un aperçu du code machine, après tu n'as plus qu'a l'interpréter en t'aidant d'internet ou d'un bouqin sur l'assembleur propre a l'architecture de ton processeur., ça parait dur aux premier abord mais finalement ce n'est pas si maléfique que ça en a l'air

edit : désolé pour le doublon, j'ai du mal ce matin

Dernière modification par alius (Le 16/08/2014, à 09:33)


Alius

Hors ligne

#6 Le 16/08/2014, à 09:57

Mr papier

Re : Adresse des variables en mémoire

Ok, donc une fois l'adresse calculée dans les registres elle est prête à être envoyée dans la RAM c'est ça. Et dans la RAM une partie de la mémoire physique est allouée aux adresses qui sont retrouvées par un algorithme spécial si j'ai bien compris.

Hors ligne

#7 Le 16/08/2014, à 10:45

alius

Re : Adresse des variables en mémoire

en gros. lors de la compilation, linkage, il y a détermination des adresses. les adresses des variables, des fonctions, ...  elles seront stockées dans un espace exprès de la mémoire. Le compilateur crée une sorte de signature unique pour chaque variables, fonctions. cette signature fait référence en mémoire à une adresse physique. Le système prend ensuite le relais pour faire le lien matériel.

Donc oui il y a bien détermination des adresses dans les registres (puisque c'est là que le processeur range ses donné pour faire ses calculs) lors de la compilation/linkage. une fois que le programme est lancé les adresses sont chargée en mémoire pour pouvoir êtres utilisées.


Alius

Hors ligne

#8 Le 16/08/2014, à 11:40

Clémentv

Re : Adresse des variables en mémoire

C'est très variable suivant les cas.

Certaines adresses peuvent être calculées à l'exécution : allocation dynamique avec malloc ou dans la pile, le résultat est stocké dans une autre variable (dont il faut connaitre l'adresse wink) ou dans un registre.

Les variables globales, les constantes et les fonctions ont des adresses fixes calculées à la compilation est écrite dans le binaire. Quand le système d'exploitation lance l'exécutable lance le programme, il copie l'exécutable en mémoire, mais, comme on ne connait à l'avance à quel endroit de la mémoire il est copié, il faut décaler toutes les adresses calculé par le compilateur pour correspondre à la position effective.

Donc finalement les adresses peuvent être dans le code, dans la pile, dans le tas ou dans des registres, à peu près partout où on peut stocker des infos.

Hors ligne

#9 Le 16/08/2014, à 13:24

Mr papier

Re : Adresse des variables en mémoire

Merci à tous de votre aide smile. Et donc quand toute les adresses sont placées dans une mémoire, l'ordinateur sait où sont les variables. Mais ce que je me demande aussi c'est comment à partir d'un nombre l'ordinateur sait repérer une case mémoire physique? Là je suppose que ça devient plus compliqué :$.

Hors ligne