I am looking for a syntax to allocate memory from a secondary memory device and not from the default heap.
How can i implement it? Using malloc()
would by default take it from heap... Surely there must be another way!
I am looking for a syntax to allocate memory from a secondary memory device and not from the default heap.
How can i implement it? Using malloc()
would by default take it from heap... Surely there must be another way!
You'd have to build or adapt your own heap manager, and overload new
and delete
, as well as new[]
and delete[]
. Initialize the heap manager with the special memory.
#include <new>
void* operator new(std::size_t size) throw(std::bad_alloc) {
while (true) {
void* result = allocate_from_some_other_source(size);
if (result) return result;
std::new_handler nh = std::set_new_handler(0);
std::set_new_handler(nh); // put it back
// this is clumsy, I know, but there's no portable way to query the current
// new handler without replacing it
// you don't have to use new handlers if you don't want to
if (!nh) throw std::bad_alloc();
nh();
}
}
void operator delete(void* ptr) throw() {
if (ptr) { // if your deallocation function must not receive null pointers
// then you must check first
// checking first regardless always works correctly, if you're unsure
deallocate_from_some_other_source(ptr);
}
}
void* operator new[](std::size_t size) throw(std::bad_alloc) {
return operator new(size); // defer to non-array version
}
void operator delete[](void* ptr) throw() {
operator delete(ptr); // defer to non-array version
}