Pages : 1
#1 Le 15/08/2014, à 12: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 .
Cordialement.
Hors ligne
#2 Le 15/08/2014, à 15:04
- dfiad77pro
Re : Adresse des variables en mémoire
Vaste sujet
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, à 17:10)
Hors ligne
#3 Le 15/08/2014, à 16:53
- Mr papier
Re : Adresse des variables en mémoire
Merci pour les cours . 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? .
Encore un grand merci.
PS: désolé de sortir un peu du sujet initial .
Hors ligne
#4 Le 16/08/2014, à 08: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, à 08:29)
Alius
Hors ligne
#5 Le 16/08/2014, à 08: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, à 08:33)
Alius
Hors ligne
#6 Le 16/08/2014, à 08: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, à 09: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, à 10: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 ) 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, à 12:24
- Mr papier
Re : Adresse des variables en mémoire
Merci à tous de votre aide . 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
Pages : 1