Jakie są obszary adresów pamięci?

Jakie formy przestrzeni adresów pamięci zostały użyte?

Obecnie powszechna jest duża, płaska, wirtualna przestrzeń adresowa. W przeszłości stosowane były bardziej skomplikowane przestrzenie adresowe, takie jak para adresu bazowego i przesunięcia, para numeru segmentu i przesunięcie, adres słowa plus jakiś indeks dla bajtu lub innego podobiektu, i tak dalej .

Od czasu do czasu różne odpowiedzi i komentarze potwierdzają, że wskaźniki C / C ++ są zasadniczo liczbami całkowitymi. Jest to niepoprawny model dla C / C ++, ponieważ różnorodność przestrzeni adresowych jest niewątpliwie przyczyną niektórych reguł C dotyczących operacji na wskaźnikach. Na przykład, nie zdefiniowanie arytmetyki wskaźnika poza tablicą upraszcza obsługę wskaźników w modelu bazowym i modelu przesunięcia. Ograniczenia konwersji wskaźnika upraszczają obsługę modeli adres-plus-dodatkowe dane.

To powtarzające się stwierdzenie motywuje to pytanie. Szukam informacji o różnych przestrzeniach adresowych, aby zilustrować, że wskaźnik C / C ++ niekoniecznie jest prostą liczbą całkowitą i że ograniczenia C / C ++ dotyczące operacji na wskaźnikach są rozsądne, biorąc pod uwagę różnorodność obsługiwanych maszyn.

Przydatne informacje mogą obejmować:

Przykłady architektur komputerowych z różnymi przestrzeniami adresowymi i opisami tych przestrzeni.Przykłady różnych przestrzeni adresowych nadal używanych w maszynach, które są obecnie produkowane.Odniesienia do dokumentacji lub wyjaśnień, zwłaszcza adresów URL.Opracowanie sposobu, w jaki przestrzenie adresowe motywują reguły wskaźnika C / C ++.

To szerokie pytanie, więc jestem otwarty na sugestie dotyczące zarządzania nim. Z przyjemnością zobaczę edycję grupową na pojedynczej ogólnej odpowiedzi. Jednak może to nie przynieść reputacji, na którą zasługują. Proponuję głosowanie nad wieloma użytecznymi wkładami.

questionAnswers(2)

yourAnswerToTheQuestion