virtual_buffer.cpp 866 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #ifdef _WIN32
  4. #include <windows.h>
  5. #else
  6. #include <sys/mman.h>
  7. #endif
  8. #include "common/assert.h"
  9. #include "common/virtual_buffer.h"
  10. namespace Common {
  11. void* AllocateMemoryPages(std::size_t size) noexcept {
  12. #ifdef _WIN32
  13. void* base{VirtualAlloc(nullptr, size, MEM_COMMIT, PAGE_READWRITE)};
  14. #else
  15. void* base{mmap(nullptr, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0)};
  16. if (base == MAP_FAILED) {
  17. base = nullptr;
  18. }
  19. #endif
  20. ASSERT(base);
  21. return base;
  22. }
  23. void FreeMemoryPages(void* base, [[maybe_unused]] std::size_t size) noexcept {
  24. if (!base) {
  25. return;
  26. }
  27. #ifdef _WIN32
  28. ASSERT(VirtualFree(base, 0, MEM_RELEASE));
  29. #else
  30. ASSERT(munmap(base, size) == 0);
  31. #endif
  32. }
  33. } // namespace Common