Browse Source

win32 VirtualAlloc

David Rose 18 years ago
parent
commit
515ab0c910
1 changed files with 29 additions and 0 deletions
  1. 29 0
      dtool/src/dtoolbase/neverFreeMemory.cxx

+ 29 - 0
dtool/src/dtoolbase/neverFreeMemory.cxx

@@ -21,6 +21,10 @@
 
 
 #ifdef WIN32
 #ifdef WIN32
 
 
+// Windows case.
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
 #else
 #else
 
 
 // Posix case.
 // Posix case.
@@ -53,6 +57,11 @@ NeverFreeMemory() {
 
 
 #ifdef WIN32
 #ifdef WIN32
 
 
+  // Windows case.
+  SYSTEM_INFO sysinfo;
+  GetSystemInfo(&sysinfo);
+
+  _page_size = (size_t)sysinfo.dwPageSize;
 
 
 #else
 #else
 
 
@@ -96,6 +105,26 @@ ns_alloc(size_t size) {
 
 
 #ifdef WIN32
 #ifdef WIN32
 
 
+  // Windows case.
+  start = VirtualAlloc(NULL, needed_size, MEM_COMMIT | MEM_RESERVE,
+                       PAGE_READWRITE);
+  if (start == (void *)NULL) {
+    DWORD err = GetLastError();
+    cerr << "Couldn't allocate memory page of size " << needed_size
+         << ": ";
+
+    PVOID buffer;
+    DWORD length = 
+      FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+                    NULL, err, 0, (LPTSTR)&buffer, 0, NULL);
+    if (length != 0) {
+      cerr << (char *)buffer << "\n";
+    } else {
+      cerr << "Error code " << err << "\n";
+    }
+    LocalFree(buffer);
+  }
+
 #else
 #else
 
 
   // Posix case.
   // Posix case.