Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

29.08.2005, 21:43

Wie sehen Klassen im RAM aus?

Hi,

Mich interessiert, wie Klassen (insbesondere bei Vererbung) im RAM aussehen.
Ich hab mir mal ein kleines Testprogramm geschrieben und festgestellt, dass Klassen im RAM nicht unbedingt gleich mit den Membervariablen anfangen, sondern da vorher noch anderes Zeug steht: Funktionspointer hinweise auf Vererbung usw.

Daher meine Frage, was steht da so alles und zum anderen, gibt es eine möglichkeit herauszufinden, wann die Daten anfangen, wie groß sie sind etc? (C++ wenn's geht ;) )

Würde mich über Antwort freuen...

PS: Dauert das immer so lange, bis man seinen Freigabeschlüssel bekommt?[/cpp]

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

2

29.08.2005, 21:48

01000100100100101010100010101010000101010010101001010010101010010101001010101001010101111100010010101001010
11000100101010100101010111010000010101010110111011100101001010101001010101000010101010101010010101010101001
1110111001010010101010010101010000101010101010100101010101010010111101110010100101010100101010100010101010
11101110010100101010100101010100001010101010101001010101010100101

so sieht es aus.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

29.08.2005, 21:57

hm, Patrick, ich erkenne aber genau das das meine Modell klasse ist, wie bist du an die herangekommen *g*

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

4

29.08.2005, 22:05

Verdammt :D

Nein, scherz bei Seite: An die Daten die im RAM sind kommst Du Atens nicht dran, Btens hast Du da drin nichts zu suchen (zu gefährlich) und Ctens versteht das selbst ein guter Assemblerprogrammierer kaum noch was da drin ist.

Sicaine

unregistriert

5

29.08.2005, 22:41

Ma ich weiß es nich mehr genau aber im Studium lernt man das!

Nach Informierung: Lesen kannst du dein ganzes Programm so wies in dein einzelnen Rambereichen drin ist.
Die Daten "Membervariablen" kommen in den ram und ham noch nen pointer auf die vtable.

Anonymous

unregistriert

6

29.08.2005, 23:15

:-D ich meinte das anders...

mir geht es um folgendes:
wenn ich zB daten von einer struktur in eine struktur lade, dann is das mit memcpy ja kein problem.

wenn ich das jetzt aber mit instanzen von klassen mache, am besten unterschiedlich "ab-erbungen" einer gleichen basisklasse dann dürfte das probleme bereiten, da ich bestimmte sachen nicht überschreiben darf, zB diese funktionszeiger und so

daher meine frage: wie kann ich herausfinden, wo die eigentlichen daten anfangen bzw wie groß sie sind?

klar das problem ließe sich lösen, indem man member für member überschreibt, aber einmal einen gesamten speicherbereich zu kopieren dürfte bei größeren klassen weniger performance ziehen...

@patrik die vs.net umgebung bietet ein praktisches tool mit der man sich den "RAM" oder eher den bereich, der vom programm genuzt wird ansehen kann...

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

7

29.08.2005, 23:19

also ich bezweifle, dass die Perfomance die du dadurch gewinnst (und es wird wirklich nicht viel sein, denn wo ist der Unterschied wenn du eine Membervariable kopierst, oder den Bereich aus dem Ram, in dem das identische steht) den Aufwand rechtfertigt... Hab noch nie gehört, dass das irgendjemand so macht..

Anonymous

unregistriert

8

29.08.2005, 23:48

Echt macht das keiner???

Naja mir geht es nicht direkt um performance (war mir nur spontan als rechtfertigung eingefallen :angel: )

mir gehts unteranderem auch um persönliche tippfaulheit ;)

...

was mir bei weiteren versuchen ins augegefallen ist, ist diese vftable.

kann mir jemand zum einen sagen, was das genau ist und wies funktioniert, hab davon bisher noch nichts gehört und im debugger immer drüber weggeschielt ;)

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

9

30.08.2005, 00:24

Zitat von »"Outsider"«

Echt macht das keiner???


was mir bei weiteren versuchen ins augegefallen ist, ist diese vftable.

kann mir jemand zum einen sagen, was das genau ist und wies funktioniert, hab davon bisher noch nichts gehört und im debugger immer drüber weggeschielt ;)


Eine Erklärung dazu kannst du unter http://courses.iicm.edu/programmierprakt…InCplusplus.pdf
ab Seite 220 finden.

mfg Philipp

Anonymous

unregistriert

10

30.08.2005, 03:11

very special thanks to Phil_GDM
Sind einige Sachen dabei, die ich bislang noch nicht wusste

hab mal ein bisschen gegoogled aber leider nichts genaueres gefunden, wie man an diese vftable oder den vfptr "bequem" dran kommt, also ohne einfach nur herum zu casten.
Ich wüsste gerne wie das geht, so dass man zB Methoden einer klasse direkt aus der vftable der klasse aufrufen könnte.

Is mittlerweile ne reine interessens sache, da mir dazu wirklich keine besonders effektive praktische anwendung einfällt, außer nem eigen c-compiler vll...

was mich außerdem interessiert ist, ob es möglich ist anhand eines übergebenen zeigers auf eine bestimmte klasseninstanz zu bestimmen, welchen typ dieses objekt hat, denn der pointer kann auch einfach gecasted worden sein.
Ein Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
class A {
public:
   int m_iA;
};
class B : public A {
public:
   int m_iB;
};

void foo(A* pA)
{
  // Zeigt pA auf ein B?

}


Und was ich auch gerne wüsste, aber nicht erfahren hab:
Steht irgendwo die größe einer instanz?
Bei dem Beispiel wäre eine instanz der klasse B ja einen int größer als eine von A...
wäre das so, dann könnte man sich den guten alten size member am anfang sparen...

ich hoffe das is nich allzu offtopic und auch nich zu viele fragen auf einmal.

Freue mich jetzt schon auf Antworten...

Werbeanzeige