No existe el límite real, pero el límite existe. Todos los punteros son variables que generalmente se almacenan en la pila, no en el montón . La pila suele ser pequeña (es posible cambiar su tamaño durante algunos enlaces). Entonces, digamos que tiene una pila de 4 MB, lo que es un tamaño bastante normal. Y digamos que tenemos un puntero que tiene un tamaño de 4 bytes (los tamaños del puntero no son los mismos dependiendo de la arquitectura, el destino y la configuración del compilador).
En este caso, el 4 MB / 4 b = 1024
número máximo posible sería 1048576, pero no debemos ignorar el hecho de que hay otras cosas en la pila.
Sin embargo, algunos compiladores pueden tener un número máximo de cadena de puntero, pero el límite es el tamaño de la pila. Entonces, si aumenta el tamaño de la pila durante el enlace con infinito y tiene una máquina con memoria infinita que ejecuta el SO que maneja esa memoria, tendrá una cadena de puntero ilimitada.
Si usa int *ptr = new int;
y coloca el puntero en el montón, esa no es la forma habitual de limitar el tamaño del montón, no la pila.
EDITAR Solo date cuenta de eso infinity / 2 = infinity
. Si la máquina tiene más memoria, entonces el tamaño del puntero aumenta. Entonces, si la memoria es infinita y el tamaño del puntero es infinito, entonces son malas noticias ... :)