Speicherbelegung
-
1. Wenn ich mir in C++ mit Hilfe des Adressoperators Adressen von Zeigern ausgeben lasse, erhalte ich dann virtuelle oder reale Speicheradressen?
Zum zweiten:
Wie kann ich nachschaun wo sich ein bestimmter Bereich im realen Speicher gerade befindet? ( zB im Hauptspeicher im L1-cache, ...)
Und wie kann ich die Veränderungen protokollieren?
zB wenn sich 2 Werte gegenseitig aus dem Cache werfen?Zweck des ganzen:
Speicherbelegung eines Programmes, das ungewöhnliches Laufzeitverhalten zeigt.
Es wird vermutet dass das daran liegt dass es am L1-Cache liegt. Nur bräuchte ich einen Tipp wie man sowas angeht wenn diese Behauptung widerlegen oder bestätigen will.
-
im nachhinein entschuldige ich mich für die obigen grammatik/rechschreibfehler...
ist ja fast ne zumutung
-
Das sind sehr spezifische Fragen.
1. Du bekommst die Adresse, wo das Objekt liegt in dem Speicher, der dir zugeteilt wurde. Es könnte also virtuell oder aber auch real sein. Hängt davon ab, ob dein Programm virtuellen oder realen Speicherplatz bekommen hat. Auf gängigen Betriebssystemem wird es aber virtueller Speicher sein.
Du kannst für Windows mal hier ansetzen:
http://msdn.microsoft.com/en-us/library/ms680553(VS.85).aspx
Für Linux gibt es solche Funktionen ebenfalls.
-
Wie kann ich nachschaun wo sich ein bestimmter Bereich im realen Speicher gerade befindet? ( zB im Hauptspeicher im L1-cache, ...)
soweit ich weiß hat man auf den L1-cache keinen einfluss, da er direkt von der cpu verwaltet wird. den ram solltest mit nem kernel debugger schon inspizieren können.
Und wie kann ich die Veränderungen protokollieren?
zB wenn sich 2 Werte gegenseitig aus dem Cache werfen?ram -> debugger,, cache ist mir nix bekannt.
Speicherbelegung eines Programmes, das ungewöhnliches Laufzeitverhalten zeigt.
Es wird vermutet dass das daran liegt dass es am L1-Cache liegt. Nur bräuchte ich einen Tipp wie man sowas angeht wenn diese Behauptung widerlegen oder bestätigen will.eg gibt tausend faktoren die da zusammen spielen, welche für performante programme eine rolle spielen, das einfachste ist die zeit zu messen welche (als summe aller faktoren) ein relativ gutes ergebnis abgibt.
lg lolo
-
386 geben folgende register her...
TR6 – TR7 Test Register 6 … 7 Zum Überprüfen des Translation Lookaside Buffer (TLB). DR0 – DR7 Debug Register 0 … 7 Dienen zum Festlegen von 4 Breakpoints auf Prozessorebene (DR0..DR3) u. a.lg lolo
-
Vielleicht hilft dir der Process Explorer, kommt von ehemals Sysinternals, jetzt Microsoft. Da kriegst du Infos wie diese für jedes Programm.
-
micrsoft nützt mir meist recht wenig, da ich suse benutzen muss und keine installationsrechte habe.
Also im Prinzip ist die Aufgabe herauszufinden ob eine Speichereinheit im Cache ist nicht zu einfach zu lösen?
-
Prinzipiell geht es die Anwendung nichts an, das ist Sache des Betriebssystems. Du kannst aber Glück haben, dass dein Betriebssystem die Informationen rausrückt. Hab aber von Suse nicht genug Ahnung um dir nen Tipp zu geben.