Implement utils::memory_reset

This commit is contained in:
Nekotekina 2018-09-22 23:14:28 +03:00
parent a605dd0a3f
commit bb524db236
2 changed files with 16 additions and 5 deletions

View File

@ -80,7 +80,7 @@ namespace utils
#ifdef _WIN32
verify(HERE), ::VirtualAlloc(pointer, size, MEM_COMMIT, +prot);
#else
verify(HERE), ::mprotect((void*)((u64)pointer & -4096), ::align(size, 4096), +prot) != -1;
verify(HERE), ::mprotect((void*)((u64)pointer & -4096), size + ((u64)pointer & 4095), +prot) != -1;
#endif
}
@ -93,6 +93,16 @@ namespace utils
#endif
}
void memory_reset(void* pointer, std::size_t size, protection prot)
{
#ifdef _WIN32
memory_decommit(pointer, size);
memory_commit(pointer, size, prot);
#else
verify(HERE), ::mmap(pointer, size, +prot, MAP_FIXED | MAP_ANON | MAP_PRIVATE, -1, 0);
#endif
}
void memory_release(void* pointer, std::size_t size)
{
#ifdef _WIN32
@ -120,7 +130,7 @@ namespace utils
addr += block_size;
}
#else
verify(HERE), ::mprotect((void*)((u64)pointer & -4096), ::align(size, 4096), +prot) != -1;
verify(HERE), ::mprotect((void*)((u64)pointer & -4096), size + ((u64)pointer & 4095), +prot) != -1;
#endif
}

View File

@ -25,11 +25,12 @@ namespace utils
*/
void memory_commit(void* pointer, std::size_t size, protection prot = protection::rw);
/**
* Decommit all memory committed via commit_page_memory.
*/
// Decommit all memory committed via commit_page_memory.
void memory_decommit(void* pointer, std::size_t size);
// Decommit all memory and commit it again.
void memory_reset(void* pointer, std::size_t size, protection prot = protection::rw);
// Free memory after reserved by memory_reserve, should specify original size
void memory_release(void* pointer, std::size_t size);