Speichermanager Problem



  • Hallo,
    ich habe mir meinen eigenen Speichermanager geschrieben, indem ich die globalen new und delete operatoren überladen habe und die C Memory Management Routinen per #define umleite. Das funktioniert auch alles wunderbar, bis ich die WinAPI Funktion QueryPerformanceFrequency(reinterpret_cast<LARGE_INTEGER*>(&timer_resolution)) in dem Konstruktor meiner Timer Klasse aufrufe. GetLastError() zeigt error code 998 an, was soviel bedeutet wie "Invalid access to memory location". Wenn ich die Funktion außerhalb des Konstruktors aufrufe, funktioniert es.

    Der Speicher für die Timer Klasse wird natürlich alloziiert und wenn ich die Member Variable timer_resolution im Konstruktor von Hand ändere, funktioniert das auch. Der Wert kann also beschrieben und gelesen werden. Habe leider im Netz nirgendwo einen ähnlichen Fall gefunden (in dem QPF mit error code 998 versagt). Habt ihr vielleicht eine Idee?



  • - Was sagt denn VirtualQuery() zu dem Zeiger?
    - Stimmt das Alignment? IIRC muss der Speicher für QueryPerformanceFrequency mit einer durch 8 teilbaren Adresse beginnen (bin mir da aber nicht sicher)



  • Ja, alle meine Allokationen sind korrekt aligned. VirtualQuery sagt:
    Base Address: 0x8df2000
    AllocationBase: 0x8db0000
    AllocationProtect: PAGE_READWRITE
    RegionSize: 8122368
    State: MEM_COMMIT
    Protect: PAGE_READWRITE
    Type: MEM_PRIVATE

    Ich habe gerade bemerkt, daß QPF funktioniert, falls der Timer meine erste Allokation ist. Zu dem Zeitpunkt sagt VirtualQuery auch das selbe wie oben. Komischerweise funktioniert ansonsten alles in meinem System, nur QPF versagt, hmmmm 🙂


Anmelden zum Antworten