alitrack / mman-win32

mman library for Windows. mirror of https://code.google.com/p/mman-win32/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Implement mremap (requires modification of mmap), method in description

awsdert opened this issue · comments

Rough outline of methods:

mmap:

reserved = virtualallocex( ..., NULL, pagesize+viewsize, MEM_RESERVE ... );
truebase = virtualallocex( ..., reserved, pagesize, MEM_COMMIT, ... );
HANDLE *handles = truebase;
handles[0] = file handle;
handles[1] = CreateFileMapping(...);
fileview = MapViewOfFileEx( handles[1], ..., viewsize, truebase + pagesize );

mremap:

original = base - pagesize;
reserved = virtualallocex( ..., original, pagesize+viewsize, MEM_RESERVE ... );
if ( !reserved )
	reserved = virtualallocex( ..., NULL, pagesize+viewsize, MEM_RESERVE ... );
truebase = virtualallocex( ..., reserved, pagesize, MEM_COMMIT, ... );
HANDLE *handles = truebase;
if ( reserved != original )
{
	memcpy( original, reserved, sizeof(HANDLE) * 2 );
	// decommit original or make available for malloc or something
}
fileview = MapViewOfFileEx( handles[1], ..., viewsize, truebase + pagesize );