Puntero lejano


En una computadora de arquitectura segmentada , un puntero lejano es un puntero que incluye un selector de segmento , lo que permite apuntar a direcciones fuera del segmento predeterminado.

La comparación y la aritmética en los punteros lejanos es problemática: puede haber varios pares de direcciones de desplazamiento de segmento diferentes que apunten a una dirección física .

Por ejemplo, en un Intel 8086 , así como en procesadores posteriores que ejecutan código de 16 bits , un puntero lejano tiene dos partes: un valor de segmento de 16 bits y un valor de compensación de 16 bits . Una dirección lineal se obtiene desplazando el valor del segmento binario cuatro veces hacia la izquierda y luego sumando el valor de compensación. Por lo tanto, la dirección efectiva es de 20 bits (en realidad, 21 bits, lo que condujo al ajuste de dirección y la puerta A20 ). Puede haber hasta 4096 pares de direcciones de desplazamiento de segmento diferentes que apuntan a una dirección física. Para comparar dos punteros lejanos, primero deben convertirse (normalizarse) a su representación lineal de 20 bits.

En los compiladores de C destinados a la familia de procesadores 8086, los punteros lejanos se declararon mediante un calificador lejano no estándar. Por ejemplo, definió un puntero lejano a un char . La dificultad de normalizar punteros lejanos podría evitarse con el calificador enorme no estándar.char far *p;