2012-04-09 8 views
2

worte ich den Code unter
VirtualAlloc Adresse

 
void * ptr1 = VirtualAlloc((void*)0x70000000, 32*1024*1024, MEM_RESERVE, PAGE_READWRITE); 
void * ptr2 = VirtualAlloc((void*)0x80000000, 4*1024*1024, MEM_RESERVE, PAGE_READWRITE); 

Aber VirtualAlloc schlägt fehl, und der Wert von ptr1 sind ptr2 immer NULL. Ich möchte die Adresse 0x70000000,0x80000000 verwenden. Weiß jemand wie ich diese Adresse benutzen kann?

Antwort

5

Dieser Teil des Speichers ist für Usermode-Anwendungen nicht zugänglich. Aus der folgenden MSDN page:

Benutzeranwendungen können VirtualAlloc mit gemeinsam genutzten Heap-Adresse Bereich (0x70000000 zu 0x7fffffff) nicht aufrufen, da dies für Benutzer Anwendungen nur-lesen und lesen/schreiben für Kernel-Modus.

+1

Ihr Link ist Windows CE. Ich glaube nicht, dass es für Windows im Allgemeinen gilt. Siehe http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887(v=vs.85).aspx –

+0

Ich erinnere mich daran, dass über 0x70000000 für den Kernel unter Windows reserviert wurde, aber nicht gefunden werden konnte eine Referenz dafür –

0

Sind Sie sicher, dass einige der Seiten im angeforderten Speicherblock nicht bereits reserviert (oder festgeschrieben) sind? VirtualAlloc kann eine reservierte Seite nicht reservieren.

Warum sind 0x70000000 und 0x80000000 speziell? Im flachen Speichermodell gibt es keinen Grund, warum eine Adresse einer anderen vorzuziehen wäre.