| 157 | } |
| 158 | |
| 159 | void* alloc_buffer(size_t bytes) { |
| 160 | void* buffer; |
| 161 | #if USE_VALGRIND |
| 162 | buffer = malloc(bytes); |
| 163 | if (!buffer) { |
| 164 | throw std::bad_alloc(); |
| 165 | } |
| 166 | #else |
| 167 | buffer = mmap(nullptr, bytes, PROT_READ | PROT_WRITE, |
| 168 | MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); |
| 169 | if (buffer == MAP_FAILED) { |
| 170 | throw std::runtime_error("memory allocation failed"); |
| 171 | } |
| 172 | #endif |
| 173 | return buffer; |
| 174 | } |
| 175 | |
| 176 | void dealloc_buffer(void* buffer, size_t bytes) { |
| 177 | #if USE_VALGRIND |
no outgoing calls