Listing 4: NoSwapDLMalloc
class NoSwapDLMalloc : PageTracker
{
public:
NoSwapDLMalloc()
{
pageSize_ = malloc_getpagesize;
}
void* doAlloc(size_t numBytes, const void* hint)
{
void *pmem = dlmalloc(numBytes);
if (!pmem)
{
throw std::bad_alloc();
}
if (!mlock(pmem, numBytes))
{
std::string msg(getErrorMsg());
dlfree(pmem);
throw std::bad_alloc();
}
addBlock(pmem, numBytes, pageSize_);
return pmem;
}
void doFree(void* pmem, size_t numBytes)
{
removeBlock(pmem, numBytes, pageSize_, munlock);
dlfree(pmem);
}
private:
std::string getErrorMsg();
size_t pageSize_;
};