Нет такой вещи, как реальный лимит, но существует лимит. Все указатели являются переменными, которые обычно хранятся в стеке, а не в куче . Стек, как правило, небольшой (можно изменить его размер во время некоторых ссылок). Допустим, у вас есть стек 4 МБ, что вполне нормально. И скажем, у нас есть указатель размером 4 байта (размеры указателя не совпадают в зависимости от архитектуры, назначения и настроек компилятора).
В этом случае 4 MB / 4 b = 1024
максимально возможное максимальное число будет 1048576, но мы не должны игнорировать тот факт, что некоторые другие вещи находятся в стеке.
Однако некоторые компиляторы могут иметь максимальное количество цепочек указателей, но пределом является размер стека. Так что если вы увеличиваете размер стека во время соединения с бесконечностью и имеете машину с бесконечной памятью, на которой работает ОС, которая обрабатывает эту память, то у вас будет неограниченная цепочка указателей.
Если вы используете int *ptr = new int;
указатель и помещаете его в кучу, то это не совсем обычный способ ограничения размера кучи, а не стека.
РЕДАКТИРОВАТЬ Просто осознайте это infinity / 2 = infinity
. Если у машины больше памяти, размер указателя увеличивается. Так что, если память бесконечна, а размер указателя бесконечен, значит, это плохие новости ... :)