diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2004-09-13 22:38:11 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2004-09-13 22:38:11 +0000 |
commit | 33189e787b98c79bd03be466ec19dfb2f65eb65f (patch) | |
tree | 5a89a9849c359508b329a3cdf9876b33eae45d5d /include/llvm/System | |
parent | 2565943289cf53ff1b8dd1dfa13b6068e4d31681 (diff) | |
download | external_llvm-33189e787b98c79bd03be466ec19dfb2f65eb65f.zip external_llvm-33189e787b98c79bd03be466ec19dfb2f65eb65f.tar.gz external_llvm-33189e787b98c79bd03be466ec19dfb2f65eb65f.tar.bz2 |
Simplify the sys::Memory interface per Chris' request.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16318 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/System')
-rw-r--r-- | include/llvm/System/Memory.h | 56 |
1 files changed, 33 insertions, 23 deletions
diff --git a/include/llvm/System/Memory.h b/include/llvm/System/Memory.h index 5b3c884..3b319cb 100644 --- a/include/llvm/System/Memory.h +++ b/include/llvm/System/Memory.h @@ -11,38 +11,48 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_SYSTEM_PATH_H -#define LLVM_SYSTEM_PATH_H - -#include <string> +#ifndef LLVM_SYSTEM_MEMORY_H +#define LLVM_SYSTEM_MEMORY_H namespace llvm { namespace sys { - /// This class provides an abstraction for various memory handling functions + /// This class encapsulates the notion of a memory block which has an address + /// and a size. It is used by the Memory class (a friend) as the result of + /// various memory allocation operations. + /// @see Memory + /// @brief Memory block abstraction. + class MemoryBlock { + public: + void* base() const { return Address; } + unsigned size() const { return Size; } + private: + void * Address; ///< Address of first byte of memory area + unsigned Size; ///< Size, in bytes of the memory area + friend class Memory; + }; + + /// This class provides various memory handling functions that manipulate + /// MemoryBlock instances. /// @since 1.4 - /// @brief An abstraction for operating system paths. + /// @brief An abstraction for memory operations. class Memory { /// @name Functions /// @{ public: - Memory() { Address = 0; AllocSize = 0; } - ~Memory() { ReleaseRWX(*this); } - - /// @throws std::string if an error occurred - static void* AllocateRWX(Memory& block, unsigned NumBytes); - - /// @throws std::string if an error occurred - static void ReleaseRWX(Memory& block); - - char* base() const { return reinterpret_cast<char*>(Address); } - unsigned size() const { return AllocSize; } - /// @} - /// @name Data - /// @{ - private: - void * Address; // Address of first byte of memory area - unsigned AllocSize; // Size, in bytes of the memory area + /// This method allocates a block of Read/Write/Execute memory that is + /// suitable for executing dynamically generated code (e.g. JIT). An + /// attempt to allocate \p NumBytes bytes of virtual memory is made. + /// @throws std::string if an error occurred. + /// @brief Allocate Read/Write/Execute memory. + static MemoryBlock AllocateRWX(unsigned NumBytes); + + /// This method releases a block of Read/Write/Execute memory that was + /// allocated with the AllocateRWX method. It should not be used to release + /// any memory block allocated any other way. + /// @throws std::string if an error occurred. + /// @brief Release Read/Write/Execute memory. + static void ReleaseRWX(MemoryBlock& block); /// @} }; } |