/// <summary> /// Creates a new instance of the host mapped memory manager. /// </summary> /// <param name="addressSpaceSize">Size of the address space</param> /// <param name="invalidAccessHandler">Optional function to handle invalid memory accesses</param> public MemoryManagerHostMapped(ulong addressSpaceSize, InvalidAccessHandler invalidAccessHandler = null) { _invalidAccessHandler = invalidAccessHandler; _addressSpaceSize = addressSpaceSize; ulong asSize = PageSize; int asBits = PageBits; while (asSize < addressSpaceSize) { asSize <<= 1; asBits++; } AddressSpaceBits = asBits; _pageTable = new ulong[1 << (AddressSpaceBits - (PageBits + PageToPteShift))]; _addressSpace = new MemoryBlock(asSize, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.Mirrorable); _addressSpaceMirror = _addressSpace.CreateMirror(); Tracking = new MemoryTracking(this, PageSize, invalidAccessHandler); _memoryEh = new MemoryEhMeilleure(_addressSpace, Tracking); }