Archiv verlassen und diese Seite im Standarddesign anzeigen : Adressraum einsehen?
Ronaldono
2007-07-13, 04:06:18
Hallo estmal,
wenn ich mir jetzt die ganzen Threads über Speicherverwaltung und Adressierung durchgelesen habe, taucht bei mir einfach eine Frage auf.
Wäre es nicht ganz interessant zu wissen, wie gross der grösste freier Block im Adressraum ist ?
Kann ich mir das irgendwie mit nem Progi oder sogar von Windows anzeigen lassen ?
Also nochmals, mir gehts nicht um den freien Arbeitspeicher, sonder um den grössten zusammenhängenden Adressbereich des Adressraums.
mfg Ronaldono
P.s. Betrifft die Problematik 4GB unter 32Bit System
Endorphine
2007-07-13, 04:28:52
P.s. Betrifft die Problematik 4GB unter 32Bit System Alles was du als Benutzer dazu wissen musst, ist, dass nur Speicher unterhalb 2 GB wirklich für die Anwendungen nutzbar ist (user space) bei 32-Bit Betriebssystemen. Die restlichen Nutzer-relevanten Informationen gibt dir unter Windows der task manager in die Hand und unter unixoiden Betriebssystemen "top". Und die beiden Tools stellen dir schon eine gewaltige Informationsmenge bereit, für die schon einiges an Betriebssystemtheorie nötig ist, um alles zu verstehen.
Aber auch hier ist für den Benutzer eigentlich nur interessant, ob wegen Speichermangel Swapping in Performance-relevantem Ausmaß stattfindet oder nicht. Alles andere ist für den Benutzer im Prinzip egal.
Ronaldono
2007-07-13, 05:02:28
Wollt zwar die Diskussion nicht von neuem Anfangen, hab jetzt aber trotzdem noch ne Frage.
Du schreibst dass nur der Speicher unterhalb von 2GB für Anwendungen nutzbar ist. Wenn ich jetzt 2GB einbaue, ist ja der ganze Kernel und das ganze System gedöns auch in den 2GB drinn. Also haben meine Andwendungen nie volle 2GB zur Verfügung. Klar soweit. Wie es es denn...
Wenn ich jetzt 4GB einbaue, abzüglich Graka RAM usw... bleiben wir sagen wir mal 3,3GB über.
Ist denn das ganze Systemzeugs oberhalb von 2GB so dass meine Anwendungen auf ganze 2GB zugreifen können, (Adressraum und Adressierung lassen wir mal aussen vor), oder auch oder teils innerhalb der ersten 2GB ?
! Alles unter 32BIT !
Spasstiger
2007-07-13, 06:33:37
Jeder Anwendung hat einen eigenen 2-GB-Adressraum, deshalb dürfte es eigentlich nicht möglich sein, dass eine andere Anwendung das Einsehen des Adressraums einer Anwendung erlaubt.
Denn die virtuelle Speicherverwaltung wurde ja extra eingeführt, damit eine Anwendung nicht in den Speicherbereich einer anderen Anwendung reinpfuschen kann.
BlackBirdSR
2007-07-13, 07:28:05
Wollt zwar die Diskussion nicht von neuem Anfangen, hab jetzt aber trotzdem noch ne Frage.
Du schreibst dass nur der Speicher unterhalb von 2GB für Anwendungen nutzbar ist. Wenn ich jetzt 2GB einbaue, ist ja der ganze Kernel und das ganze System gedöns auch in den 2GB drinn. Also haben meine Andwendungen nie volle 2GB zur Verfügung. Klar soweit. Wie es es denn...
Natprlich muss das System etc sich dann in den 2GB breit machen. Es wäre mein Wunschtraum, dass Windows nur Adressraum, aber keinen physikalischen Speicher braucht ;)
Allerdings ist das nicht viel Speicherplatz, der dir da verloren geht.
Wichtig ist, dass trotzdem jedes Spiel/Programm einen 2GB großes Adressraum hat. Volle 2GB Speicher brauchen sowieso nur sehr wenige Applikationen. Selbst Spiele wie SupremeCommander und Battlefield kommen nicht ganz ran. Gothic3 schon eher.
Aber dann gibt es ja noch die Swapfile.
Diesen Programmen geht allerdings viel früher ein freies Speicherfenster aus. Und wie man diese einsehen kann, weiss ich jetzt auch nicht auf Anhieb, sorry.
Neomi
2007-07-13, 11:46:07
Da jede Anwendung ihren eigenen Adressraum hat (4 GiB unter 32 Bit Windows, von denen 2 GiB für die Anwendung nutzbar sind) und darin geladene Libraries usw. eingeblendet werden, ist das in jeder Anwendung auf jedem System leicht anders. Wenn du 2 GiB physikalischen RAM hast und eine Anwendung startest, macht sich das System im Adressraum der Anwendung trotzdem oberhalb von 2 Gib breit, die Anwendung hat die unteren 2 zur Verfügung. Startest du eine zweite Anwendung, hat auch die wieder 2 GiB virtuell zur Verfügung. Nutzen beide Anwendungen ihren Adressraum aus, wird eben geswappt.
Eine Anwendung kann sehr leicht rausfinden, wieviel sie maximal in einem Block allokieren könnte, indem sie es einfach testet. Ob dafür bereits eine Funktion zur Verfügung steht, weiß ich nicht, habe ich nie gebraucht. Per Binärsuche funktioniert es jedenfalls immer, hier ein Beispiel in C++:
size_t GetMaxBlockSize()
{
size_t BlockSizeMin, BlockSizeMax;
BlockSizeMin = 0;
BlockSizeMax = (sizeof(size_t) > 4) ? 18446744073709551615 : 4294967295;
while (BlockSizeMin + 1 < BlockSizeMax)
{
size_t BlockSizeTest = BlockSizeMin + ((BlockSizeMax - BlockSizeMin) >> 1);
void *pBlockTest = malloc(BlockSizeTest);
if (pBlockTest != NULL)
{
BlockSizeMin = BlockSizeTest;
free(pBlockTest);
}
else
BlockSizeMax = BlockSizeTest;
}
return(BlockSizeMin);
}
Keine Sorge, geswappt wird dadurch nichts, da der Speicher nicht angesprochen wird. Auf meinem System (Win2k SP4) in einem Testprogramm, das nur diesen Test durchführt und das Ergebnis ausgibt, habe ich 1878 MiB als maximale Blockgröße.
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.