[llvm-commits] CVS: llvm/include/llvm/System/Memory.h
Reid Spencer
reid at x10sys.com
Mon Sep 13 15:38:24 PDT 2004
Changes in directory llvm/include/llvm/System:
Memory.h updated: 1.1 -> 1.2
---
Log message:
Simplify the sys::Memory interface per Chris' request.
---
Diffs of the changes: (+33 -23)
Index: llvm/include/llvm/System/Memory.h
diff -u llvm/include/llvm/System/Memory.h:1.1 llvm/include/llvm/System/Memory.h:1.2
--- llvm/include/llvm/System/Memory.h:1.1 Fri Sep 10 23:20:58 2004
+++ llvm/include/llvm/System/Memory.h Mon Sep 13 17:38:12 2004
@@ -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);
/// @}
};
}
More information about the llvm-commits
mailing list