mem.h revision 677833bc953b6cb418c701facbdcf4aa18d6c44e
2362N/A * InnoTek Portable Runtime - Memory Management and Manipulation. 0N/A * Copyright (C) 2006 InnoTek Systemberatung GmbH 0N/A * This file is part of VirtualBox Open Source Edition (OSE), as 0N/A * you can redistribute it and/or modify it under the terms of the GNU 0N/A * General Public License as published by the Free Software Foundation, 0N/A * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE 0N/A * distribution. VirtualBox OSE is distributed in the hope that it will 0N/A * be useful, but WITHOUT ANY WARRANTY of any kind. 0N/A * If you received this file as part of a commercial VirtualBox 0N/A * distribution, then only the terms of your commercial VirtualBox 0N/A * license agreement apply instead of the previous paragraph. 0N/A#
error "There are no RTMem APIs available Guest Context!" 0N/A/** @defgroup grp_rt_mem RTMem - Memory Management and Manipulation 0N/A/** @def RTMEM_ALIGNMENT 0N/A * The alignment of the memory blocks returned by RTMemAlloc(), RTMemAllocZ(), 0N/A * RTMemRealloc(), RTMemTmpAlloc() and RTMemTmpAllocZ() for allocations greater 0N/A * than RTMEM_ALIGNMENT. 0N/A#
define RTMEM_ALIGNMENT 4 /**< @todo Michael, can you check that this is still true with ucLibc, please. */ 0N/A * Allocates temporary memory. 0N/A * Temporary memory blocks are used for not too large memory blocks which 0N/A * are believed not to stick around for too long. Using this API instead 0N/A * of RTMemAlloc() not only gives the heap manager room for optimization 0N/A * but makes the code easier to read. 0N/A * @returns Pointer to the allocated memory. 0N/A * @returns NULL on failure. 0N/A * @param cb Size in bytes of the memory block to allocated. 0N/A * Allocates zero'ed temporary memory. 0N/A * Same as RTMemTmpAlloc() but the memory will be zero'ed. 0N/A * @returns Pointer to the allocated memory. 0N/A * @returns NULL on failure. 0N/A * @param cb Size in bytes of the memory block to allocated. 0N/A * Free temporary memory. 0N/A * @param pv Pointer to memory block. 0N/A * @returns Pointer to the allocated memory. 0N/A * @returns NULL on failure. 0N/A * @param cb Size in bytes of the memory block to allocated. 0N/A * Allocates zero'ed memory. 0N/A * Instead of memset(pv, 0, sizeof()) use this when you want zero'ed 0N/A * memory. This keeps the code smaller and the heap can skip the memset 0N/A * in about 0.42% of calls :-). 0N/A * @returns Pointer to the allocated memory. 0N/A * @returns NULL on failure. 0N/A * @param cb Size in bytes of the memory block to allocated. 0N/A * Duplicates a chunk of memory into a new heap block. 0N/A * @returns New heap block with the duplicate data. 0N/A * @returns NULL if we're out of memory. 0N/A * @param pvSrc The memory to duplicate. 0N/A * @param cb The amount of memory to duplicate. 0N/A * Duplicates a chunk of memory into a new heap block with some 0N/A * additional zeroed memory. 0N/A * @returns New heap block with the duplicate data. 0N/A * @returns NULL if we're out of memory. 0N/A * @param pvSrc The memory to duplicate. 0N/A * @param cbSrc The amount of memory to duplicate. 0N/A * @param cbExtra The amount of extra memory to allocate and zero. 0N/A * Reallocates memory. 0N/A * @returns Pointer to the allocated memory. 0N/A * @returns NULL on failure. 0N/A * @param pvOld The memory block to reallocate. 0N/A * @param cbNew The new block size (in bytes). 0N/A * Free memory related to an virtual machine 0N/A * @param pv Pointer to memory block. 0N/A * Allocates memory which may contain code. 0N/A * @returns Pointer to the allocated memory. 0N/A * @returns NULL on failure. 0N/A * @param cb Size in bytes of the memory block to allocate. 0N/A * @param pv Pointer to memory block. 0N/A * Allocate page aligned memory. 0N/A * @returns Pointer to the allocated memory. 0N/A * @returns NULL if we're out of memory. 0N/A * @param cb Size of the memory block. Will be rounded up to page size. 0N/A * Allocate zero'ed page aligned memory. 0N/A * @returns Pointer to the allocated memory. 0N/A * @returns NULL if we're out of memory. 0N/A * @param cb Size of the memory block. Will be rounded up to page size. 0N/A * Free a memory block allocated with RTMemPageAlloc() or RTMemPageAllocZ(). 0N/A * @param pv Pointer to the block as it was returned by the allocation function. 0N/A * NULL will be ignored. /** Page level protection flags for RTMemProtect(). * Change the page level protection of a memory region. * @returns iprt status code. * @param pv Start of the region. Will be rounded down to nearest page boundary. * @param cb Size of the region. Will be rounded up to the nearest page boundary. * @param fProtect The new protection, a combination of the RTMEM_PROT_* defines. * Allocates physical contiguous memory (below 4GB). * The allocation is page aligned and the content is undefined. * @returns Pointer to the memory block. This is page aligned. * @param pPhys Where to store the physical address. * @param cb The allocation size in bytes. This is always * rounded up to PAGE_SIZE. * Frees memory allocated ysing RTMemContAlloc(). * @param pv Pointer to return from RTMemContAlloc(). * @param cb The cb parameter passed to RTMemContAlloc(). /** @name Electrical Fence Version of some APIs. * Same as RTMemTmpAlloc() except that it's fenced. * @returns Pointer to the allocated memory. * @returns NULL on failure. * @param cb Size in bytes of the memory block to allocate. * Same as RTMemTmpAllocZ() except that it's fenced. * @returns Pointer to the allocated memory. * @returns NULL on failure. * @param cb Size in bytes of the memory block to allocate. * Same as RTMemTmpFree() except that it's for fenced memory. * @param pv Pointer to memory block. * Same as RTMemAlloc() except that it's fenced. * @returns Pointer to the allocated memory. Free with RTMemEfFree(). * @returns NULL on failure. * @param cb Size in bytes of the memory block to allocate. * Same as RTMemAllocZ() except that it's fenced. * @returns Pointer to the allocated memory. * @returns NULL on failure. * @param cb Size in bytes of the memory block to allocate. * Same as RTMemRealloc() except that it's fenced. * @returns Pointer to the allocated memory. * @returns NULL on failure. * @param pvOld The memory block to reallocate. * @param cbNew The new block size (in bytes). * Free memory allocated by any of the RTMemEf* allocators. * @param pv Pointer to memory block. * Same as RTMemDup() except that it's fenced. * @returns New heap block with the duplicate data. * @returns NULL if we're out of memory. * @param pvSrc The memory to duplicate. * @param cb The amount of memory to duplicate. * Same as RTMemEfDupEx except that it's fenced. * @returns New heap block with the duplicate data. * @returns NULL if we're out of memory. * @param pvSrc The memory to duplicate. * @param cbSrc The amount of memory to duplicate. * @param cbExtra The amount of extra memory to allocate and zero. /** @def RTMEM_WRAP_TO_EF_APIS * Define RTMEM_WRAP_TO_EF_APIS to wrap RTMem APIs to RTMemEf APIs.