GlobalAlloc: Daten im Ram halten?
-
Ist es irgendwie möglich (unter Vista) einen Speicher zu reservieren, der nicht auf die Festplatte geswappt wird, sondern immer im RAM gehalten wird - mit GlobalAlloc scheint das nicht zu funktionieren
-
nö
-
wie macht es dann diese Memtest Programm hier:
http://hcidesign.com/memtest/download.html
???
-
VitualLock
-
Vertexwahn schrieb:
wie macht es dann diese Memtest Programm hier:
http://hcidesign.com/memtest/download.html
???Das Programm reserviert Speicher und hofft, daß der nicht auf die Festplatte geswappt wird.
Wenn danach beim stundenlangen Lesen und Schreiben ein Fehler auftritt, dann kann es ja nur am RAM liegen, oder?
-
Speicher kann man mit der Funktion malloc() reservieren. Dies steht auch im Petzold, Seite 1385.
-
bernibutt schrieb:
Speicher kann man mit der Funktion malloc() reservieren. Dies steht auch im Petzold, Seite 1385.
erst lesen, dann schreiben

-
Hab jetzt mal versucht ein Demo Porgramm zu schreiben - funktioniert leider noch nicht - falls jemand Lust hat mal sowas zu machen - hier grob die Richtung wei es in etwa gehen könnte:
#include <windows.h> #include <stdio.h> #include <iostream> using namespace std; void main() { int size = 1024 * 1024; // Working Size muss erhöht werden damit der Prozess mehr Speicher im RAM halten kann SetProcessWorkingSetSize(GetCurrentProcess(), 204800, 204800 + size ); void* buf = VirtualAlloc(NULL, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); if(DWORD error = GetLastError()) { cout<<"Error: "<<error<<endl; } if(!VirtualLock(buf, size)) { cout<<"VitualLook failed."<<endl; cout<<"ErrorNumber: "<<GetLastError()<<endl; } system("pause"); VirtualUnlock(buf,size); VirtualFree(buf, size, 0); }
-
WAS geht denn nicht, und WAS für eine Fehlermeldung kommt?
Bist Du (echter) Admin?
-
Ausgabe:
VitualLook failed. ErrorNumber: 1453MSDN:
ERROR_WORKING_SET_QUOTA
1453
Insufficient quota to complete the requested service.mmh...
EDIT: ich führ die Anwendung mit Admin Rechten aus
-
Hab jetzt noch eine Fehlerausgabe hinzugefügt:
#include <windows.h> #include <stdio.h> #include <iostream> #include <string> using namespace std; void ReportError(DWORD i_dwErrorCode) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the string. wcout<<(LPCWSTR)lpMsgBuf<<endl; cout<<"ErrorNumber: "<<i_dwErrorCode<<endl; //MessageBox( NULL, (LPCWSTR)lpMsgBuf, L"Error", MB_OK | MB_ICONINFORMATION ); // Free the buffer. LocalFree( lpMsgBuf ); } void main() { int size = 1024 * 1024; SetProcessWorkingSetSize(GetCurrentProcess(), 204800, 204800 + size ); void* buf = VirtualAlloc(NULL, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); if(DWORD error = GetLastError()) { ReportError(GetLastError()); } if(!VirtualLock(buf, size)) { ReportError(GetLastError()); } system("pause"); VirtualUnlock(buf,size); VirtualFree(buf, size, 0); }Lustige Fehlermeldung:
Nicht gen³gend Quoten, um den angeforderten Dienst auszuf³hren.
ErrorNumber: 1453
-
Also, der Fehler ist:
ERROR_PAGED_SYSTEM_RESOURCESWas für ein OS?
Warum übergibst Du "MEM_RESERVE"?
Lass man das "SetProcessWorkingSetSize" weg...
-
Nur mal am Rande:
http://blog.m-ri.de/index.php/2008/01/05/die-unsitte-aus-performancegruenden-virtuallock-zu-verwenden/