linux : place de la mémoire d'une variable
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

linux : place de la mémoire d'une variable



  1. #1
    cosmoff

    linux : place de la mémoire d'une variable


    ------

    bonjour,

    voila je m'amuse en langage C, et je voulais savoir la place que mes variables prenaient sur ma ram.
    j'ai donc fait ce code:
    Code:
    double a = 15;
    int b = 5;
    char c ='f';
    int d = 14;
    
    printf("l'adresse de a est : %x \n",&a); //j'affiche l'adresse de a de ma ram en hexa
    printf("l'adresse de b est : %x \n",&b); //j'affiche l'adresse de b de ma ram en hexa
    printf("l'adresse de c est : %x \n",&c); //j'affiche l'adresse de c de ma ram en hexa
    printf("l'adresse de d est : %x \n",&d); //j'affiche l'adresse de d de ma ram en hexa
    je trouve les valeurs :
    l'adresse de a est : 1f4abf18
    l'adresse de b est : 1f4abf10
    l'adresse de c est : 1f4abf0f
    l'adresse de d est : 1f4abf14

    je ne comprend pas car l'adresse de &a par rapport a &b perd 8 bit ce qui est normal car c'est un double, mais ensuite b qui est un int devrait perdre 4 bits de mémoire par rapport a &c et on constate qu'il n'en perd qu'un pourquoi?

    De plus sur ma virtual box je n'ai que 1 Go de ram pourtant je constante des adresses allant jusqu'au decimal 2 000 000 000 ce qui dépasse mes 1 Go, une idée la dessus?

    merci d'avance

    -----

  2. #2
    Jack
    Modérateur

    Re : linux : place de la mémoire d'une variable

    je ne comprend pas car l'adresse de &a par rapport a &b perd 8 bit
    Pas des bits, mais des octets.

    Pour le reste, on ne sait pas comment le compilateur décide de remplir la pile avec les variables, sans compter les problèmes d'alignement qui vont faire qu'un caractère va pouvoir occuper 4 octets par exemple. La seule façon de connaitre la taille d'une variable est d'utiliser l'opérateur sizeof.

    De plus sur ma virtual box je n'ai que 1 Go de ram pourtant je constante des adresses allant jusqu'au decimal 2 000 000 000 ce qui dépasse mes 1 Go, une idée la dessus?
    Avec les OS tournant sur PC, l'espace adressable d'un processus ne correspond pas à l'espace physique en raison de l'utilisation de la MMU (memory managment unit) du processeur qui permet de travailler avec espace mémoire virtuel, la MMU effectuant la translation entre adresses virtuelles et physiques.

  3. #3
    pm42

    Re : linux : place de la mémoire d'une variable

    Citation Envoyé par Jack Voir le message
    Pour le reste, on ne sait pas comment le compilateur décide de remplir la pile avec les variables, sans compter les problèmes d'alignement qui vont faire qu'un caractère va pouvoir occuper 4 octets par exemple. La seule façon de connaitre la taille d'une variable est d'utiliser l'opérateur sizeof.
    En effet même si sizeof ne donnera la mémoire perdu entre 2 variables différentes pour respecter les contraintes d'alignement éventuelles. Elle les prendra en compte dans une struct mais pas dans un exemple comme celui là.
    Mais je pense qu'ici, le problème comme la vérité sont ailleurs.

    Citation Envoyé par cosmoff Voir le message
    l'adresse de a est : 1f4abf18
    l'adresse de b est : 1f4abf10
    l'adresse de c est : 1f4abf0f
    l'adresse de d est : 1f4abf14

    je ne comprend pas car l'adresse de &a par rapport a &b perd 8 bit ce qui est normal car c'est un double, mais ensuite b qui est un int devrait perdre 4 bits de mémoire par rapport a &c et on constate qu'il n'en perd qu'un pourquoi?
    c est en 1f4abf0f et b en 1f4abf10. c prend bien 1 octet. b est en 1f4abf10 et d en 1f4abf14. b prend donc bien 4 octets. Le compilateur a simplement mis les variables dans l'ordre a, d, b, c sur la pile, sans doute pour optimiser les dites contraintes d'alignement.

Discussions similaires

  1. Comment installer windows a la place de linux
    Par invite1a3a0150 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 03/11/2012, 03h04
  2. Plus de place mémoire dans mon compilateur (GRRRRR)
    Par invite635643ae dans le forum Électronique
    Réponses: 27
    Dernier message: 31/12/2011, 11h52
  3. unix ou linux sa mémoire
    Par invite4de3cfb3 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 18/02/2009, 13h26
  4. variable aléatoire à densité sans mémoire
    Par invite0f0e1321 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 17/01/2007, 21h00
  5. Kylix (version delphi) sous linux pb de variable
    Par invite5516adb1 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 22/04/2004, 14h22