Adresszuweisung bei Initialisierung

Skini

Erfahrenes Mitglied
Hi,
ich hab folgendes Problem:
ich möchte ein unsigned-char-Array initialisieren, und dabei die einzelnen Felder einer bestimmten Speicheradressezuweisen. Das Array wäre 2000 Felder groß, und die Felder würden ein byte voneinander entfernt im Speicher stehen.
Greetz Skini
 
Hi,
ich will in meinem OS auf den Textspeicher zugreifen, aber nicht indem
ich einen Pointer veränder, sondern als variable, z.B. unsigned char screen_buffer[2000].
Es wird aber nur jedes 2. Byte benötigt, da zwischen durch Farbinformationen Liegen.
Skini
 
Hi.

Das was du dort bewerkstelligen willst wird nicht gehen. Du kannst einem Element eines Arrays nicht einfach eine andere Adresse zuteilen. Ein Array ist (grundlegend) nichts anderes als ein Zeiger - der Zugriff erfolgt durch Berechnung der Adresse vom Beginn des Arrays aus.

Was du machen könntest ist:
C:
union xy {
  char b;
  char dummy[2];
};

union xy* array = 0xffeeff; // Adresse des Speichers

array[2].b = 'x';
In C++ könntest du diesen Zugriff mehr verstecken und im Grunde ein Array-ähnliches Objekt mit der Semantik erstellen die du beabsichtigst.

Gruß
 
Ein Array ist (grundlegend) nichts anderes als ein Zeiger - der Zugriff erfolgt durch Berechnung der Adresse vom Beginn des Arrays aus.

könnte ich dann nicht dass hier machen:
C++:
char* screen_buffer = 0xB8000;
screen_buffer[45] = "A";
?
Skini
 
Wenn du den vorigen hinweis beachtest, würde es syntaktisch gehen.

Die Frage ist nur, ob es so gute Auswirkungen haben wird, irgendeinen Speicher zu überschreiben...
das ist es ja, das Betriebssystem teilt das ein, wer welchen Speicherplatz für was bekommt,
und ein eigenes Programm kann das nicht beeinflussen.
 
Zurück