Szczegóły implementacji wskaźnika w C

chciałbym wiedziećarchitektury, które naruszają założenia Wymieniłem poniżej. Chciałbym również wiedzieć, czy którekolwiek z założeń jest fałszywe dla wszystkich architektur (to znaczy, jeśli którykolwiek z nich jest całkowicie błędny).

sizeof (int *) == sizeof (char *) == sizeof (void *) == sizeof (func_ptr *)

Reprezentacja wszystkich wskaźników w pamięci dla danej architektury jest taka sama, niezależnie od wskazywanego typu danych.

Reprezentacja wskaźnika w pamięci jest taka sama jak liczba całkowita o tej samej długości bitowej co architektura.

Mnożenie i dzielenie typów danych wskaźnika jest zabronione tylko przez kompilator. UWAGA: Tak, wiem, że to nonsens. Mam na myśli - czy istnieje wsparcie sprzętowe, które zabrania tego nieprawidłowego użycia?

Wszystkie wartości wskaźnika można rzutować na jedną liczbę całkowitą. Innymi słowy, jakie architektury nadal wykorzystują segmenty i przesunięcia?

Zwiększanie wskaźnika jest równoważne dodaniusizeof(the pointed data type) do adresu pamięci zapisanego przez wskaźnik. Jeślip jestint32* następniep+1 jest równy adresowi pamięci 4 bajty pop.

Jestem najbardziej przyzwyczajony do wskaźników używanych w ciągłym, wirtualnym obszarze pamięci. W tym celu mogę ogólnie myśleć o nich jako o adresach na linii liczbowej. Zobacz pytanie Przepełnienie stosuPorównanie wskaźników.

questionAnswers(11)

yourAnswerToTheQuestion