punteros far

will
14 de Mayo del 2005
Hola alguien pordria ayudarme, he estado leyendo acreca de lospunteros near y far pero no entiendo muy bien para que sirven, el caso es que en contre un codigo que usa este tipo de punteros especificamente "far" pero al correrlo en mi pc el compilador me arroja un erro debido a esta palabra, es mas ni siquiera la reconoce como palabra reservada por favor tengo entendidoq ue se usaba este puntero en verciones anteriores de c++ y no se por que otra palabra se haya sustituido o es por mi compilador, estoy usando el Dev-c++ que me lo acabo de bajar, otra cosa me aparce una advertencia cuando incluyo el archivo "iostream.h" tal parece que ya no se usa o es que los manuales de la web estan muy desactualizados por favor alguien ayudeme

hiei
14 de Mayo del 2005
Veraz... los punteros far y near son de los procesadores X86 especificamente (en otras arquitecturas los punteros son siempre iguales)
Lo que diferencia a los punteros FAR de los NEAR es que los primeros pueden direccionar TODA la memoria accesibre por el procesador mientras que los NEAR solo un segmento de esta memoria (generalmente 64K)
Tambien los punteros NEAR ocupan menos que los FAR siendo, respectivamente de 16 y 32 bits (dos o cuatro bytes) su espacio en memoria.
Los punteros NEAR son un numero desde 0 a 65535 que accede a una pocicion concreta dentro de algun segment (generalmente direccionado por el registro del procesador DS o ES de lo cual se encarga el compilador) mientras que los punteros FAR tambien especifican el segmento a acceder (por eso necesitan dos bytes mas)
En la arquitectura X86 de modo real la direccion efectiva (el dato que aparece en las 20 patitas de direcciones al momento de hacer referencia a la zona apuntada por ese puntero) se obtiene (internamente al procesador) asi:
direccion = segmento * 16 + desplasamiento
Por ejemplo:
40000h segmento
+
00B70h desplasamiento dentro del segmento
--------
40B70h Direccion efectiva
Esto sera como ver la memoria partida en 16 pedacitos (segmentos) de 65536 (64K) bytes
Tambien existe el modelo de dividir la memoria en 65536 pedacitos de 16 bytes que es el enfoque opuesto y es el que usa DOS para asignar memoria

Bueno, esto tiene su variante en los sistemas de 32 bits. En estos el desplasamiento es de 32 bits (puntero near) referenciado a un descriptor de segmento (que es una entrada a una tabla que dice al procesador donde esta y que atributos tiene ese segmento) seleccionable entre dos bancos de 8192 segmentos... pero esto ya es modo protegido...

Th?red
14 de Mayo del 2005
Hola amigo, ya ni te preocupes por aprender punteros near o far, son cosa del pasado y ya no se utilizan.
No es tanto para los procesadores antiguos sino más bien para los sistemas operativos antiguos que no podía manejar toda la memoria.
"far" nunca ha sido una palabra reservada de C o C++, al menos no del ansi, que yo sepa solo era reservada en los compiladores turbo C o de borland viejos. El sistema operativo y los compiladores creaban aplicaciones de 16 bits por los que no podías manejar toda la memoria, con far aumentabas el tamaño de los apuntadores a 20 bits.
Las PC actuales son de 64 bits para que te des una idea.

Ahora ya no se utiliza esa distinción y los compiladores de actuales no reconocen esa palabra porque ya no tiene sentido, así que solo quita "far" de tus programas en Dev-C++ y verás como compila (si es que es ANSI/ISO)

Saludos.