Szerokość bitu magistrali adresu fizycznego może być większa lub mniejsza niż szerokość bitu w danym adresie pamięci, ponieważ istnieją różne hacki sprzętowe, które można zaprojektować w systemie, aby umożliwić dziwne tryby adresowania. Na przykład w niektórych systemach 32-bitowych szyna adresowa ma szerokość 52 bitów. Jako inny przykład niektóre instrukcje procesora mogą dekodować dłuższy adres przy użyciu kombinacji adresu podstawowego i tabeli odnośników.
Na koniec zadaniem sprzętu jest interpretacja adresu pamięci z procesora. Procesor po prostu oblicza potrzebny adres pamięci i wysyła go do kontrolera pamięci płyty głównej (pamiętaj, mówimy tutaj o sprzęcie, a nie oprogramowaniu, zobacz moją ostatnią notatkę na dole). Zadaniem kontrolera pamięci jest interpretacja tego adresu i umieszczenie odpowiednich danych na szynie pamięci.
Ponieważ wszystko to jest obsługiwane na poziomie sprzętowym, można faktycznie zwiększyć fizyczną przestrzeń adresową niektórych niższych bitów systemów pamięci za pomocą fizycznego rozszerzenia adresu . Ponownie, sposób obsługi tych adresów rozszerzonych jest częścią sposobu, w jaki system / sprzęt został wdrożony.
Na koniec, aby dać więcej korzyści hackom sprzętowym, o których wspomniałem powyżej, dobrym przykładem jest mapowane na pamięć wejście / wyjście (w skrócie MMIO). Umożliwia to procesorowi dostęp zarówno do urządzeń peryferyjnych, jak i pamięci RAM za pośrednictwem samej magistrali adresowej. Zwykle odbywa się to przez adresy pamięci wyższego rzędu, aby uniknąć konfliktów adresów niższego rzędu. Doprowadziło to jednak do powstania powszechnie znanej bariery pamięci 3 GB we wszystkich wariantach konsumenckich 32-bitowych systemów operacyjnych Windows. Ponownie, jest to po prostu pokazanie, co jest możliwe na poziomie sprzętowym.
Z punktu widzenia programisty wysokiego poziomu nie ma to nic wspólnego ze zmiennymi wskaźnikowymi. Zawsze mają ten sam rozmiar danych, ponieważ te rozszerzenia adresów są obsługiwane przez system operacyjny i / lub sam sprzęt. Rozmiary, adresy i przesunięcia wskaźników są ustawiane / obliczane przez kompilator.