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.