"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs
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.
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.
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
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 vergetenOp 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...?
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 optredenOp 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.
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
Ultrashort:
Een anachronisme.Op donderdag 25 april 2002 02:41 schreef _Mo_ het volgende:
Hoi,
Wat is een FAR pointer?
Kijk in een willekeurig boek over C/C++ zou ik zeggen...
"Logica brengt je van A naar B, verbeelding brengt je overal." - Albert Einstein
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 vergetenNee, 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
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
...
Windows kan er mee overweg door de 'hoge' gebieden gewoon virtueel te verplaatsen naar de 32 bits adress space.
(Dingen als MapUserPhysicalPages() enzo)
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