Beste Tweakers,
Ik ben bezig met een memory scanning tool in C++. Ik heb nu een werkend prototype dat vrij snel en accuraat werkt. Het enige nadeel is: Ik sla alle data op in een vector. Dat betekent dus, veel geheugengebruik. Ik heb gezocht naar een snelle oplossing, snel kwa performance dan
, en kwam uit bij memory mapped files. Ik heb hier wat onderzoek naar gedaan, en het principe is me duidelijk. Echter krijg ik het niet voor elkaar om te bedenken hoe ik dit nu kan implementeren in mijn programma!
Wat ik eigenlijk graag zou willen is een interface die vanuit het bestaande stuk code bruikbaar is. Dan moet ik hieraan denken:
Mijn vraag is eigenlijk als volgt. Hoe kan ik ervoor zorgen dat ik een onderliggende vector, array of ander soort lijst in een memory mapped file wordt opgeslagen? Of sla ik volledig de plank mis, en is er een veel gemakkelijkere oplossing? Ik weet dat ik in feite gewoon te maken heb met een stuk geheugen, en met memcpy de data gewoon raw kan opslaan.
p.s. Voor het geval dat iemand dit weet, ik gebruik de Win32 API functies voor de memory map, CreateFileMapping, MapViewOfFile en UnmapViewOfFile. Ik heb echter niet kunnen vinden hoe ik de grootte van de map verander. Is er toevallig iemand die dit weet?
Bij voorbaat dank!
Ik ben bezig met een memory scanning tool in C++. Ik heb nu een werkend prototype dat vrij snel en accuraat werkt. Het enige nadeel is: Ik sla alle data op in een vector. Dat betekent dus, veel geheugengebruik. Ik heb gezocht naar een snelle oplossing, snel kwa performance dan
Wat ik eigenlijk graag zou willen is een interface die vanuit het bestaande stuk code bruikbaar is. Dan moet ik hieraan denken:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
| void ClearResults(); void Add(MemoryBlockBase* block); void SetResultType(MemoryScanValueType type); // Deze methode zou ik ook kunnen vervangen door een functie die één element op een bepaalde index ophaalt, of een iterator. const Vector<MemoryBlockBase*>& GetSearchResults() const; const int GetResultCount() const; const MemoryBlockBase* operator [] (const int x) { return this->mFirstMillionResults[x]; }; |
Mijn vraag is eigenlijk als volgt. Hoe kan ik ervoor zorgen dat ik een onderliggende vector, array of ander soort lijst in een memory mapped file wordt opgeslagen? Of sla ik volledig de plank mis, en is er een veel gemakkelijkere oplossing? Ik weet dat ik in feite gewoon te maken heb met een stuk geheugen, en met memcpy de data gewoon raw kan opslaan.
p.s. Voor het geval dat iemand dit weet, ik gebruik de Win32 API functies voor de memory map, CreateFileMapping, MapViewOfFile en UnmapViewOfFile. Ik heb echter niet kunnen vinden hoe ik de grootte van de map verander. Is er toevallig iemand die dit weet?
Bij voorbaat dank!