mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-04 22:11:26 +12:00
Implement utils::memory_reset
This commit is contained in:
parent
a605dd0a3f
commit
bb524db236
2 changed files with 16 additions and 5 deletions
|
@ -80,7 +80,7 @@ namespace utils
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
verify(HERE), ::VirtualAlloc(pointer, size, MEM_COMMIT, +prot);
|
verify(HERE), ::VirtualAlloc(pointer, size, MEM_COMMIT, +prot);
|
||||||
#else
|
#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
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,6 +93,16 @@ namespace utils
|
||||||
#endif
|
#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)
|
void memory_release(void* pointer, std::size_t size)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -120,7 +130,7 @@ namespace utils
|
||||||
addr += block_size;
|
addr += block_size;
|
||||||
}
|
}
|
||||||
#else
|
#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
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,11 +25,12 @@ namespace utils
|
||||||
*/
|
*/
|
||||||
void memory_commit(void* pointer, std::size_t size, protection prot = protection::rw);
|
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);
|
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
|
// Free memory after reserved by memory_reserve, should specify original size
|
||||||
void memory_release(void* pointer, std::size_t size);
|
void memory_release(void* pointer, std::size_t size);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue