Jak często rozmiar słowa jest taki sam jak rozmiar wskaźnika?

-1

Wskaźnik przechowuje adres pamięci, więc jego rozmiar jest rozmiarem adresu pamięci, który zależy od liczby lokalizacji pamięci. Z drugiej strony, rozmiar Worda jest największą jednostką, którą instrukcja może pracować / działa, więc Rozmiar komórki pamięci jest nieistotny, ponieważ wiele może być zbieranych jednocześnie. Jaki jest związek między rozmiarem słowa a rozmiarem wskaźnika?

radhika
źródło
„Wielkość słowa jest największą jednostką” - jest to fałsz. Wskaźnik może być 32-bitowy lub 64-bitowy, wszystko zależy od rozmiaru adresu. Instrukcja może zaakceptować, w zależności od instrukcji, inny rozmiar bajtów, dlatego istnieje instrukcja 32-bitowa i 64-bitowa. ten komentarz został uproszczony, aby ułatwić jego pisanie
Ramhound
Sprawdź drugą odpowiedź cs.stackexchange.com/questions/48425/…
radhika
@radhika Kto powiedział ci, że „rozmiar słowa jest największą jednostką”? Co powiesz na Long lub Longlong? Jeśli spojrzysz na to stół byłbyś zdziwiony, że rozmiar słowa jest najbardziej zawodnym danymi pod względem rozmiaru. Zależało to od architektury procesora, którą uruchamia
Alex
„Ale ten sam komputer może działać na bajtach, 16-bitowych słowach i 32-bitowych długich słowach”. - to stwierdzenie jest poprawne, drugie NIE jest w 100% i ma inżyniera szczegóły. Cała odpowiedź, do której się odniosłeś, nie jest aż tak dokładna, jeśli mógłbym wydać downvote, to dlatego, że widzę liczne stwierdzenia, które są po prostu nieścisłe. ARM i x86 są zasadniczo światem architektury komputerowej i oba w zależności od konkretnego procesora obsługują zmienne rozmiary słów.
Ramhound

Odpowiedzi:

2

Nie muszą być takie same, a liczba systemów komputerowych, w których nie są one znacznie większe niż te, w których się znajdują. Mimo to istnieją pewne relacje między rozmiarem wskaźnika a rozmiarem „słowa”.

Programy wykonują wiele arytmetyki wskaźników. Subskrybowanie tablicy jest dodawaniem wskaźnika. Wskaźniki są porównywane ze sobą. Jeśli Twój procesor nie może wykonywać arytmetycznych obliczeń w rozmiarze wskaźnika, twój adres musi być podzielony na wiele zmiennych, co skutkuje segmentową lub bankową przestrzenią adresową. Są one skomplikowane w zarządzaniu i rozprzestrzenianiu się typów podobnych do wskaźnika (blisko wskaźnika, dalekiego wskaźnika, wskaźnika bazowego). W rezultacie otrzymujesz dodatkowe dziwne ograniczenia, takie jak połączone listy, które mogą przechowywać więcej elementów niż tablica.

Jednak mikrokontrolery z 8-bitowymi szynami danych i większymi przestrzeniami adresowymi (być może tylko dla kodu, a nie danych) są wspólne. Z drugiej strony nowoczesne procesory ogólnego przeznaczenia z 32-bitowymi lub 64-bitowymi wskaźnikami mają znacznie szersze słowa danych niż wskaźniki (na przykład 512-bitowe słowa danych w podsystemie AVX nowoczesnych procesorów x86_64). Wiele algorytmów bez blokady zależy od atomowego dostępu do danych, które są co najmniej dwukrotnie większe od wskaźnika.

Ben Voigt
źródło
Rozmiar słowa to maksymalna liczba bitów, które procesor może wykonać jednocześnie, co oznacza, że ​​rozmiar ALU i rozmiar słowa są takie same, a zatem rozmiar słowa jest zdefiniowany w architekturze, popraw mnie, jeśli się mylę.
radhika
Czy, jeśli będę mówić o wielkości rejestru danych pamięci i rozmiarze magistrali danych, czy będą one takie same lub różne?
radhika
1

TLDR: Przypadek prawdopodobnie.

Wskaźnik nie jest częścią architektury komputerowej per se, jest to funkcja języka programowania. Na przykład interfejs API systemu Windows definiuje własne typy wskaźników i ich wielkość. W C w Windows: wskaźnik do znaku ( char* ) waha się od 32 do 64 bitów w zależności od wersji. Rozmiar słowa może mieć z tym niewiele wspólnego.

Słowo to bardzo przeładowane słowo, ahem, termin. W architekturze CPU słowo może odnosić się do rozmiaru instrukcji, magistrali danych, magistrali pamięci itp. W Windows API słowo jest skrótem niepodpisanym, tj. przynajmniej 2 bajty, a zatem zależy od tego, jak są realizowane skróty.

Może istnieć korelacja między słowami MS a słowami wielkości instrukcji, ale myślę, że do debaty na ten temat potrzebowałbyś programisty systemu operacyjnego i wątpię, czy wpłynie to na wielkość wskaźników.

jiggunjer
źródło
0

W pewnym momencie rejestry komputerowe i magistrale wewnętrzne przeszły z 4-bitowych na 8-bitowe, a następnie 16-bitowe, 32-bitowe i obecnie 64-bitowe. Maksymalna przestrzeń adresowa zależy od rozmiaru wskaźnika (chociaż niektóre wczesne procesory, np. Z80A, mogą strona pamięć w porcjach wielkości wskaźnika).

Gdy autobusy stały się szersze, pożądane było również zwiększenie pamięci RAM, więc zwiększył się również rozmiar wskaźnika. Czasami system operacyjny nie nadążał za większym autobusem, np. przy przechodzeniu z Windows 7 32-bit na 64-bit, maksymalna adresowalna pamięć RAM najpierw przeniosła się z 4 GB do 8 GB, a na końcu 192 GB w wersjach high-end.

Tak więc rozmiar rejestrów i magistrali (od półprzewodnika do bajtu, następnie Worda, a następnie DWORD w 16-bitowym systemie operacyjnym MS, usw.) wzrastał dowolnie, podobnie jak przestrzeń adresowa. Pełniejsze wyjaśnienie jest dostępne w @DarkDust.

DrMoishe Pippik
źródło
32-bitowe wersje systemu Windows mogły zająć się więcej niż 4 GB na proces, ale w tym czasie nie było żadnego komercyjnego sprzętu ani oprogramowania, które uzasadniałyby takie koszty inżynieryjne. Linux mający wirtualny zerowy koszt rozwoju był w stanie wykorzystać do tego niemal nieograniczone ludzkie godziny pracy. Jaki jest rozmiar rejestru pamięci w architekturze procesora w przypadku pamięci systemu fizycznego?
Ramhound
Nie: po prostu arbitralne decyzje zwiększyły rozmiar wskaźnika, aby umożliwić adresowanie większej ilości pamięci RAM.
DrMoishe Pippik
Zapotrzebowanie na większe typy zmiennych pojawiło się, jak słusznie zauważyliście, procesory zaangażowały tę zdolność. Bez instrukcji nie istniałyby, ponieważ nie byłoby możliwości manipulowania nimi (dodawanie, odejmowanie). Ponownie rozmiar wskaźnika ma niewiele wspólnego z pamięcią RAM, pamięć wirtualna i pliki stron rozwiązały wiele problemów, ale adresowanie 2 GB vs 128 GB nie miało nic wspólnego z wprowadzanymi instrukcjami. Twoja odpowiedź ma jednak potencjał
Ramhound
Pytanie dotyczyło wielkości a wskaźnik , który jest używany do adresowania przestrzeni pamięci i dlaczego zwiększał się także wraz ze wzrostem szerokości rejestru. Ponownie była to arbitralna decyzja, aby zezwolić większym programom i zestawom danych bez stronicowania.
DrMoishe Pippik
1
ZA wskaźnik jest czynnikiem decydującym, który kontroluje wielkość przestrzeni adresowej i jest zazwyczaj ustalany dla każdego systemu operacyjnego. Szerokość (wewnętrzna) magistrali i rozmiar rejestru są ustalane przez procesor i kontrolują, jak duży fragment danych jest przetwarzany w cyklu CPU. Wielkość zmiennej jest dowolna, aw programie pewna zmienna może być pojedynczym bajtem (booleany, choć teoretycznie jeden bit, faktycznie zużywają pełny bajt dla ułatwienia adresowania. Jak rozrzutny!), DWORD lub wielobajtowy (jak w pływającym numery punktów).
DrMoishe Pippik