[C++/MFC] Wat zijn FAR pointers?

Pagina: 1
Acties:

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Hoi,

Ik zat een beetje te lezen in de MSDN library (bij de MFC sectie) en kwam het begrip FAR pointer tegen. Heb ik geprobeerd om op google hierover wat te vinden, alleen dat is eigenlijk hopeloos .. 't wordt wel een paar keer genoemd, alleen 'k heb niet kunnen vinden wat het nou precies betekend. Zoeken in de MSDN zelf is ook vrij hopeloos... gigantisch veel hits op "FAR pointer" waarvan het meeste er niets mee te maken heeft... Heb wel wat gevonden over het gebruik van FAR pointers, alleen daar wordt ook niet uitgelegd wat het nou is...
Wat is een FAR pointer en wat is nou precies het verschil tussen een FAR pointer en een "normale" pointer...?

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Uit geheugenkrenterigheid ondersteunen veel processoren verschillende addresseringsmodi. Behalve relatieve en absolute addressering, kan op de laatste optie nog gevarieerd te worden door in 8086-modus het segment-deel van een geheugenadres weg te laten. Het adres ligt dan in het huidige segment (afhankelijk van het soort operatie) en is dus 'near'. Een 'far' pointer bevat in die context ook het segment en neemt dus meer ruimte in.

Om Windows 3.x en eerder enigszins compatibel te laten zijn met de huidige Windows API (hoewel ik betwijfel dat dat nog erg goed opgaat) zijn de NEAR en FAR macro's nog steeds opgenomen in de Windows headers. Omdat (cache) geheugen tegenwoordig vrij goedkoop is en het praktischer bleek om in een plat (flat) geheugenmodel te werken (zonder onderverdeling tussen segmenten en offsets) zijn alle addressen (en dus pointers) in de 386 architectuur hetzelfde. NEAR en FAR pointers bestaan dus niet meer.

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Dus de pointers zoals we ze nu gebruiken zijn eigenlijk hetzelfde als NEAR pointers? Aangezien er geen segmenten meer worden gebruikt...?

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Op donderdag 25 april 2002 02:59 schreef _Mo_ het volgende:
Dus de pointers zoals we ze nu gebruiken zijn eigenlijk hetzelfde als NEAR pointers? Aangezien er geen segmenten meer worden gebruikt...?
Nee, pointers zoals we nu gebruiken zijn eigenlijk altijd far; ze bevatten het gehele geheugenadres en niet slechts een offset binnen een segment. Het concept van near pointers kun je vergeten :).

  • beany
  • Registratie: Juni 2001
  • Laatst online: 05:29

beany

Meeheheheheh

Op donderdag 25 april 2002 04:06 schreef Sneechy het volgende:

[..]

Nee, pointers zoals we nu gebruiken zijn eigenlijk altijd far; ze bevatten het gehele geheugenadres en niet slechts een offset binnen een segment. Het concept van near pointers kun je vergeten :).
Klopt helemaal, maar je zou kunnen zeggen dat een Flat geheugen model te benaderen is op de Near PTR methode. Je hebt 1 groot segment waar je alles direct in kan benaderen(eeuuhhm, CPU gegenereerde GPF's laten we dan maar even buiten beschouwing die zou kunnen gaan optreden ;) ) Je hoeft alleen niet naar andere segmenten te switchen. Dus een Far model is 1 groot segment die je op een soort gelijke manier kan benaderen als een Near PTR.

ASM is alweer ff gelden, dus als ik er een zooitje van maak, shoot me! ;)

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Ultrashort:
Op donderdag 25 april 2002 02:41 schreef _Mo_ het volgende:
Hoi,

Wat is een FAR pointer?
Een anachronisme.

Professionele website nodig?


  • Exirion
  • Registratie: Februari 2000
  • Laatst online: 23:15

Exirion

Gadgetfetisjist

Kijk in een willekeurig boek over C/C++ zou ik zeggen...

"Logica brengt je van A naar B, verbeelding brengt je overal." - Albert Einstein


  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

Nee, pointers zoals we nu gebruiken zijn eigenlijk altijd far; ze bevatten het gehele geheugenadres en niet slechts een offset binnen een segment. Het concept van near pointers kun je vergeten
Juist niet. Het begrip segment kan je het beste vergelijken met het begrip descriptor, wat feitelijk erop neerkomt dat je nu zelf mag bepalen hoe groot, breed en zwaar een segment is. Pointers wijzen nog altijd naar een offset BINNEN die descriptor. Je zou dus beter kunnen zeggen dat je het concept van far pointer het beste kunt vergeten :)

Yo dawg, I heard you like posts so I posted below your post so you can post again.


Verwijderd

En hoe zit dat dan als je een Pentium Pro/II/III/IV hebt? Die dingen hebben allemaal de mogelijkheid om meer dan 4Gb geheugen te adresseren... (36 bits adresbus als ik me niet vergis, goed voor zo'n 64Gb). Op die manier komen de oude segmenten van 'vroeger' weer terug, alleen zijn ze dan wat groter dan 64k :P...

Windows kan er mee overweg door de 'hoge' gebieden gewoon virtueel te verplaatsen naar de 32 bits adress space.
(Dingen als MapUserPhysicalPages() enzo)
Pagina: 1