• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Adresy w pamięci są wyświetlane w bitach czy bajtach?

Object Storage Arubacloud
+1 głos
336 wizyt
pytanie zadane 18 czerwca 2018 w C i C++ przez Huberti Gaduła (4,500 p.)

Dzień dobry, mam w książce taki kod:

int a = 6;
double b = 4.5;

std::cout<<&a<<std::endl;
std::cout<<&b<<std::endl;

oraz wynik uruchomienia programu:

0x0065fd40
0x0065fd44

do tego taki komentarz w książce:

Różnica między tymi adresami to 0x0065fd44 - 0x0065fd40 = 4 bajty

Dlaczego różnica między tymi adresami wynosi 4 bajty, a nie 4 bity?

1 odpowiedź

+1 głos
odpowiedź 18 czerwca 2018 przez criss Mędrzec (172,590 p.)
wybrane 18 czerwca 2018 przez Huberti
 
Najlepsza
Bo bitów się nie adresuje. Zaadresować możesz pojedynczy bajt, bity są nieadresowalne. Patrząc od drugiej strony - niemożliwe, żeby jakikolwiek typ miał długość 4bitów (poniżej 1 bajta), więc `b` nie może być w pamięci o 4 bity dalej niż `a`.
komentarz 18 czerwca 2018 przez Huberti Gaduła (4,500 p.)

Dzięki, już rozumiem. Czyli w pamięci 32 bitowa zmienna `a` wygląda tak:

Wartość binarnie: 00000000 00000000 00000000 00000110
Adres heksadecymalnie: 0x0065fd40 0x0065fd41 0x0065fd42 0x0065fd43

Więc różnica między ‭0x0065fd44 (początek zmiennej `b`) i ‭0x0065fd40 (początek zmiennej `a`) wynosi 4 bajty.

komentarz 18 czerwca 2018 przez criss Mędrzec (172,590 p.)

Prawie. Zmienna `a` w pamięci wygląda tak (pomyliłeś kolejność bajtów):

Wartość binarnie: 00000110 00000000 00000000 00000000
Adres heksadecymalnie: 0x0065fd40 0x0065fd41 0x0065fd42 0x0065fd43
komentarz 19 czerwca 2018 przez Huberti Gaduła (4,500 p.)

Czyli jak to jest interpretowane? Czytając od lewej do prawej mamy wartość:

00000110 00000000 00000000 00000000

czyli 100663296‬.

Czytając od prawej do lewej mamy wartość:

00000000 00000000 00000000 01100000

 czyli 96.

Więc jak odczytywana jest wartość zmiennej `a`czyli 6?

komentarz 19 czerwca 2018 przez criss Mędrzec (172,590 p.)
Teraz to nie mam pojęcia co ty zrobiłeś w tej tabelce na dole XD Chodziło mi o to, że mniej znaczące bajty są pod mniejszymi adresami..
1
komentarz 19 czerwca 2018 przez Huberti Gaduła (4,500 p.)

Haha, sam nie wiem laugh.

Podsumowując, dla procesorów korzystających z formy zapisu big endian będzie to wyglądało tak:

Wartość binarnie: 00000000 00000000 00000000 00000110
Adres heksadecymalnie: 0x0065fd40 0x0065fd41 0x0065fd42 0x0065fd43

Natomiast dla procesorów korzystających z formy zapisu little edian:

Wartość binarnie: 00000110 00000000 00000000 00000000
Adres heksadecymalnie: 0x0065fd40 0x0065fd41 0x0065fd42 0x0065fd43

Dobrze myślę?

2
komentarz 19 czerwca 2018 przez criss Mędrzec (172,590 p.)
Tak, zgadza się :)

Podobne pytania

0 głosów
0 odpowiedzi 356 wizyt
pytanie zadane 11 października 2018 w C i C++ przez Aguli Nowicjusz (190 p.)
0 głosów
3 odpowiedzi 1,010 wizyt
pytanie zadane 28 listopada 2017 w C i C++ przez Kr1-98 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 142 wizyt

92,684 zapytań

141,589 odpowiedzi

320,073 komentarzy

62,044 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...