| //===- llvm/System/Memory.h - Memory Support --------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file was developed by Reid Spencer and is distributed under the |
| // University of Illinois Open Source License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file declares the llvm::sys::Memory class. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_SYSTEM_MEMORY_H |
| #define LLVM_SYSTEM_MEMORY_H |
| |
| namespace llvm { |
| namespace sys { |
| |
| /// 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 memory operations. |
| class Memory { |
| /// @name Functions |
| /// @{ |
| public: |
| /// 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. |
| /// \p NearBlock may point to an existing allocation in which case |
| /// an attempt is made to allocate more memory near the existing block. |
| /// @throws std::string if an error occurred. |
| /// @brief Allocate Read/Write/Execute memory. |
| static MemoryBlock AllocateRWX(unsigned NumBytes, const MemoryBlock* NearBlock); |
| |
| /// 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); |
| |
| /// @} |
| }; |
| } |
| } |
| |
| |
| #endif |