Exemple #1
0
UniqueRange AllocateVM(size_t size, vm::PageType pageType, int prot)
{
	const UniqueRange::pointer p = vm::Allocate(size, pageType, prot);

	static volatile IdxDeleter idxDeleter;
	if(idxDeleter == 0)	// (optional optimization)
		RegisterUniqueRangeDeleter(vm::Free, &idxDeleter);

	return RVALUE(UniqueRange(p, size, idxDeleter));
}
Exemple #2
0
UniqueRange Allocate(size_t size, size_t alignment)
{
	ENSURE(is_pow2(alignment));
	if(alignment <= (size_t)idxDeleterBits)
		alignment = idxDeleterBits+1;

	const size_t alignedSize = round_up(size, alignment);
	const UniqueRange::pointer p = rtl_AllocateAligned(alignedSize, alignment);
	return RVALUE(UniqueRange(p, size, idxDeleterAligned));
}
Exemple #3
0
UniqueRange AllocateAligned(size_t size, size_t alignment)
{
	ENSURE(is_pow2(alignment));
	alignment = std::max(alignment, allocationAlignment);

	const size_t alignedSize = round_up(size, alignment);
	const UniqueRange::pointer p = rtl_AllocateAligned(alignedSize, alignment);

	static volatile IdxDeleter idxDeleterAligned;
	if(idxDeleterAligned == 0)	// (optional optimization)
		RegisterUniqueRangeDeleter(FreeAligned, &idxDeleterAligned);

	return RVALUE(UniqueRange(p, size, idxDeleterAligned));
}