Was bedeutet das Schlüesselwort far
-
Hi,
ich habe jetzt schon viel gegoogelt und bin immer noch dahinter gekommen was das Schlüsselwort "far" bedeutet
unsigned char far variable;
funktion(unsigned char far* Variable)
Vielen Dank für eure Antworten und Schöne Grüße
-
http://de.wikipedia.org/wiki/Segmentierung_(Speicherverwaltung)
Ein far-Pointer ist einer, der Segment und Offset enthält, also segmentübergreifend zeigen kann. Ein near-Pointer dagegen enthält nur ein Offset und kann nur ins Datensegment zeigen. Diese Schlüsselworte gibt es in ANSI-C nicht, aber in allen MS-DOS-Compilern. Was für eine Architektur ist das bei dir?
-
Andi27 schrieb:
unsigned char far variable;
ein 'far' oder 'near' vor einzelnen objekten legt fest, wo das objekt platziert werden darf. bei 'near' kommt es in ein datensegment, dass durch einen 'near' poiter erreichbar ist, bei 'far' kann es überall hin, wo platz ist. konsequenterweise darf man dann nicht mit 'near'-pointern darauf zugreifen.
steht 'near' oder 'far' vor einem einzelnen objekt wird die default-einstellung ('memory-model') für dieses objekt ignoriert. übrigens gibts noch andere solcher pseudo-keywords wie 'huge', 'xhuge', 'paged' usw, die sich auf das 'wohin mit der variablen' auswirken.
-
Hallo,
vielen Dank für eure vielen Antworten. Nun bin ich schon wieder etwas schlauer. Allerdings haben sich bei mir noch mehr Fragen ergeben.
-
Was passiert wenn ich ein Array deklariere welches Größer ist als ein Segment.
-
Muss ich also immer selber einen far Pointer deklarieren wenn ich solch eine Funktion AUfrufe?
-
Welche Vor Nachteile haben near und far Pointer?
-
Wie kann ich mit einem near Pointer auf einem far Pointer zugreifen? Muss ich dazu den far Pointer Byte weise in einen near Pointer kopieren.
Vielen Dank schonmal für eure Antworten
Schöne Grüße
Andi
-
-
Andi27 schrieb:
- Was passiert wenn ich ein Array deklariere welches Größer ist als ein Segment.
Das geht höchstens, wenn du es als huge deklarierst. Kommt auch drauf an, was size_t für eine Größe hat.
- Muss ich also immer selber einen far Pointer deklarieren wenn ich solch eine Funktion AUfrufe?
Nein, das dürfte eine implizite Typumwandlung sein. Für den Segmentanteil des far-Pointers wird dann halt das Datensegment eingesetzt.
- Welche Vor Nachteile haben near und far Pointer?
Gegenüber welcher Alternative?
-
Andi27 schrieb:
- Was passiert wenn ich ein Array deklariere welches Größer ist als ein Segment.
ich glaube das geht nicht, gibt 'nen compiler-fehler 'array exceeds segment size' oder sowas. der c-standard definiert, dass alle elemente eines arrays hintereinander liegen sollen und das kann eine segmentierte architektur nicht garantieren bei so grossen arrays.
Andi27 schrieb:
- Welche Vor Nachteile haben near und far Pointer?
zugriffe über 'near' pointer sind schneller, weil keine segmentumschaltung nötig ist, dafür kann man mit 'far' pointern überall im adressraum zugreifen.
Andi27 schrieb:
- Wie kann ich mit einem near Pointer auf einem far Pointer zugreifen? Muss ich dazu den far Pointer Byte weise in einen near Pointer kopieren.
du meinst mit einen near-** auf einen far-?. das geht, wenn sich der far- sich in einem 'near' segment befindet. z.b. so: int near ** far p; das erste near platziert den doppelpointer in ein near-segment und das 'far' sagt, dass damit far-* adressiert werden sollen (kann sein, dass die syntax bei deinem compiler anders ist).