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
Partager