Nie ma czegoś takiego jak prawdziwy limit, ale limit istnieje. Wszystkie wskaźniki są zmiennymi, które zwykle są przechowywane w stosie, a nie w stosie . Stos jest zazwyczaj niewielki (można zmienić jego rozmiar podczas łączenia). Powiedzmy, że masz stos 4 MB, co jest dość normalnym rozmiarem. Powiedzmy, że mamy wskaźnik o rozmiarze 4 bajtów (rozmiary wskaźnika nie są takie same w zależności od architektury, ustawień docelowych i ustawień kompilatora).
W takim przypadku 4 MB / 4 b = 1024
maksymalna możliwa liczba to 1048576, ale nie powinniśmy ignorować faktu, że niektóre inne rzeczy są w stosie.
Jednak niektóre kompilatory mogą mieć maksymalną liczbę łańcuchów wskaźników, ale limitem jest wielkość stosu. Jeśli więc zwiększysz rozmiar stosu podczas łączenia z nieskończonością i będziesz mieć maszynę z pamięcią nieskończoności, na której działa system operacyjny obsługujący tę pamięć, będziesz mieć nieograniczony łańcuch wskaźników.
Jeśli użyjesz int *ptr = new int;
i umieścisz wskaźnik na stosie, nie jest to tak zwyczajny sposób, że limitem będzie rozmiar sterty, a nie stos.
EDYCJA Po prostu zdaj sobie z tego sprawę infinity / 2 = infinity
. Jeśli urządzenie ma więcej pamięci, zwiększa się rozmiar wskaźnika. Więc jeśli pamięć to nieskończoność, a wielkość wskaźnika to nieskończoność, to jest to zła wiadomość ... :)