2009-07-16 17 views
4

Ohne zu wissen, dass ich 'far' anstelle von 'var' durch meinen Fehler eingegeben habe. Ich bemerkte, dass das Schlüsselwort fett ist, was mir die Gedanken gibt, dass es ein Teil von Delphis Syntax ist.Was nutzt das Schlüsselwort "far" in Delphi?

Weiß jemand etwas über "weit" Schlüsselwort?

Antwort

11

Weit bedeutet nichts in 32-Bit-Versionen von Delphi (Delphi 2 und höher). Es wurde in der 16-Bit-Programmierung verwendet, um die Segmentposition anzugeben.

Es ist immer noch in der Sprache ausschließlich für die Abwärtskompatibilität mit sehr alten Legacy-Code.

Von der alten Delphi 7-Hilfedatei, Thema "Aufrufkonventionen":

„Die Richtlinien in der Nähe, weit, und Export beziehen sich auf Aufrufkonventionen in 16-Bit-Windows-Programmierung Sie haben keine Auswirkung in 32-Bit. Anwendungen und werden nur aus Gründen der Abwärtskompatibilität gepflegt. "

8

Wie Ken White erklärte, wird es nur in 16-Bit-Anwendungen verwendet.

Da ein 16-Bit-Zeiger nur 64 KB Speicher adressieren kann, werden Speichersegmente verwendet, um auf mehr Speicher zuzugreifen. Der Prozessor hat vier Segmentregister, so dass er vier aktive Segmente zur gleichen Zeit haben kann, ein Codesegment (cs), ein Datensegment (ds), ein Stapelsegment (ss) und ein zusätzliches Segment (es). Jedes Segment ist 64 kb groß, aber sie können den gleichen Speicherbereich oder die Überlappung der Parteien adressieren.

A nahe Zeiger ist ein 16-Bit-Zeiger innerhalb desselben Segments. Es wird als Zeiger auf Daten oder Code im selben Modul verwendet.

Ein Fernzeiger ist ein 16 + 16-Bit-Zeiger, der aus einem 16-Bit-Segmentoffset und einem Nahzeiger besteht. Es wird als Zeiger auf Daten oder Code in einem anderen Modul verwendet. Wenn Sie einen far-Zeiger verwenden, um eine Prozedur aufzurufen, wird der Segmentteil in die cs- und ds-Register (IIRC) eingefügt, um auf den Code und die Daten in diesem Modul zuzugreifen.

Die physikalische Adresse eines Segments + Zeigerpaar wird als Segment * 16 + Zeiger berechnet. Das bedeutet, dass ein 16-Bit-Programm 1024 kB Speicher adressieren kann. Um auf mehr Speicher zugreifen zu können, werden die beiden erweiterten und erweiterten Speichertechniken verwendet. (Auch die hohe Speichertechnik in gewissem Umfang, bei der die Adresse nicht mit einer 1-MB-Grenze umgeht, aber mit dem Segmentoffset FFFF erhalten Sie direkten Zugriff auf 65520 Byte Erweiterungsspeicher.)

+1

Near Pointer wurden nie unterstützt. Das Far-Schlüsselwort wird auf Prozeduren angewendet, die in der Implementierung deklariert sind, die Sie jedoch weitgehende Aufrufkonventionen verwenden möchten. Wenn sie also über einen Zeiger aufgerufen würden, würden sie eher eine ferne Rückgabe als eine nahe Rückgabe ausführen. –

+2

Das Schlüsselwort geht zurück über Delphi 1, zu Borland/Turbo Pascal ... – Guffa

1

Es kann zurückkehren. Ich habe Gerüchte von einem Trend gehört, PAE mit all diesen x64-CPUs zu betrachten. So können Sie das normale 2 oder 3 Gig mem limit adressieren (OS boot setting dependend), aber einen 48 bit Zeiger, der weitere 4 Gigs adressieren kann. Natürlich muss man viel billigen DDR3 physischen Speicher installiert haben. Sag 24 Gig. Nicht zu viele Programme, die mehr als 3 Gigabyte benötigen. Die Swap-Dateiverwaltung bedeutet, dass nicht alle laufenden Programme auf dem Speicher liegen. Aber vielleicht sind Daten zu scannen oder zu verarbeiten.

Also weit kann als 48-Bit-Zeiger, um den Übergang von 32 zu 64-Bit-Adresse zu helfen.

+0

Zitat benötigt .... – Johan