Bonjour,

je suis sur une distrib linux 64 bit avec 4 go de ram . En regardant les adresses je suis tombé sur quelque chose de curieux que je ne comprends pas . Voici le code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
#include <stdlib.h>
#include <stdio.h>
 
#include <unistd.h>
#include <errno.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <math.h>
#include <string.h>
 
 
 
 
 
int main (void) 
{
 
 
 int entier=118;
  int *p1 = &entier;
 
 fprintf(stdout," valeur vers laquelle pointe p1: %d \n ",*p1);
 fprintf(stdout," taille de l'adresse p1 est :  %d \n ",sizeof(p1) );
 fprintf(stdout," l'adresse(en decimale) vers laquelle pointe p1 est :  %lu \n ",p1);
 fprintf(stdout," l'adresse(en hexa) vers laquelle pointe p1 est :  %lx \n ",p1);
 
 
 
 
 
 
 
  unsigned long  i;
 unsigned long  resultat;
  unsigned long  adresse;
  unsigned long * ptr_tmp = (unsigned long *)(&p1);
  adresse=*ptr_tmp;
 
 
 
 
int machaine[64];
 
 for(i=0;i<64;i++)
 {
   resultat = (adresse >> i) & 1 ;
   if( resultat == 1 )
   { machaine[i]=1;  }
   else
   { machaine[i]=0;}
 }  
 
  fprintf(stdout,"l'adresse( en binaire ) vers laquelle pointe p1 est  :");
for(i=0;i<64;i++)
{ 
 
  fprintf(stdout,"%d",machaine[63-i]);
 
} 
 
fprintf(stdout,"\n");
 
 
 
 
 
 
 return 0;
 
 
}

quand je lance le programme ./adresse1
j'ai comme resultat


valeur vers laquelle pointe p1: 118
taille de l'adresse p1 est : 8
l'adresse(en decimale) vers laquelle pointe p1 est : 140733569392828
l'adresse(en hexa) vers laquelle pointe p1 est : 7fff166960bc
l'adresse( en binaire ) vers laquelle pointe p1 est :0000000000000000011111111111111100010110011010010110000010111100

la taille de l'adresse , 8 octet , semble correspondre au fait que je suis sur un système 64 bit . Par contre quand je regarde l'adresse , j'obtiens un nombre qui dépasse de très loin les capacités de la machine . Je m'attendais à un résultat compris entre 0 et 2^32 vu qu'il y a seulement 4 Go sur la machine .

Question : à quoi est dû ce grand nombre ?

Merci