Не існує такого поняття, як реальна межа, але межа існує. Усі покажчики - це змінні, які зазвичай зберігаються в стеці, а не в купі . Стек зазвичай невеликий (можна змінити його розмір під час деяких зв'язків). Тож скажемо, у вас є стек 4 Мб, що є цілком нормальним розміром. І скажемо, що у нас є вказівник розміром 4 байти (розміри вказівника не однакові залежно від архітектури, налаштувань цілі та компілятора).
У цьому випадку 4 MB / 4 b = 1024
можлива максимальна кількість буде 1048576, але ми не повинні ігнорувати той факт, що деякі інші речі знаходяться в стеці.
Однак деякі компілятори можуть мати максимальну кількість ланцюгів вказівників, але обмеженням є розмір стека. Отже, якщо ви збільшите розмір стека під час з'єднання з нескінченністю і матимете машину з нескінченною пам'яттю, яка працює з ОС, яка обробляє цю пам'ять, тому у вас буде необмежений ланцюжок покажчиків.
Якщо ви використовуєте int *ptr = new int;
і поміщаєте вказівник у купу, то не таким звичайним обмеженням шляху буде розмір купи, а не стек.
EDIT Просто зрозумійте це infinity / 2 = infinity
. Якщо машина має більше пам'яті, то розмір вказівника збільшується. Отже, якщо пам'ять - нескінченність, а розмір вказівника - нескінченність, то це погані новини ... :)