BDE 4.14.0 Production release
Loading...
Searching...
No Matches
bdls::MemoryUtil Struct Reference

#include <bdls_memoryutil.h>

Public Types

enum  Access {
  k_ACCESS_NONE = 0 , k_ACCESS_READ = 0x1 , k_ACCESS_WRITE = 0x2 , k_ACCESS_EXECUTE = 0x4 ,
  k_ACCESS_READ_WRITE = k_ACCESS_READ | k_ACCESS_WRITE , k_ACCESS_READ_EXECUTE = k_ACCESS_READ | k_ACCESS_EXECUTE , k_ACCESS_WRITE_EXECUTE = k_ACCESS_WRITE | k_ACCESS_EXECUTE , k_ACCESS_READ_WRITE_EXECUTE ,
  BDESU_ACCESS_NONE = k_ACCESS_NONE , BDESU_ACCESS_READ = k_ACCESS_READ , BDESU_ACCESS_WRITE = k_ACCESS_WRITE , BDESU_ACCESS_EXECUTE = k_ACCESS_EXECUTE ,
  BDESU_ACCESS_READ_WRITE = k_ACCESS_READ_WRITE , BDESU_ACCESS_READ_EXECUTE = k_ACCESS_READ_EXECUTE , BDESU_ACCESS_WRITE_EXECUTE = k_ACCESS_WRITE_EXECUTE , BDESU_ACCESS_READ_WRITE_EXECUTE = k_ACCESS_READ_WRITE_EXECUTE ,
  ACCESS_READ = k_ACCESS_READ , ACCESS_WRITE = k_ACCESS_WRITE , ACCESS_EXECUTE = k_ACCESS_EXECUTE , ACCESS_NONE = k_ACCESS_NONE ,
  ACCESS_READ_WRITE = k_ACCESS_READ_WRITE , ACCESS_READ_EXECUTE = k_ACCESS_READ_EXECUTE , ACCESS_WRITE_EXECUTE = k_ACCESS_WRITE_EXECUTE , ACCESS_READ_WRITE_EXECUTE = k_ACCESS_READ_WRITE_EXECUTE
}
 

Static Public Member Functions

static int pageSize ()
 Return the memory page size of the platform.
 
static int protect (void *address, int numBytes, int mode)
 
static void * allocate (int numBytes)
 
static int deallocate (void *address)
 

Member Enumeration Documentation

◆ Access

Enumerator
k_ACCESS_NONE 
k_ACCESS_READ 
k_ACCESS_WRITE 
k_ACCESS_EXECUTE 
k_ACCESS_READ_WRITE 
k_ACCESS_READ_EXECUTE 
k_ACCESS_WRITE_EXECUTE 
k_ACCESS_READ_WRITE_EXECUTE 
BDESU_ACCESS_NONE 
BDESU_ACCESS_READ 
BDESU_ACCESS_WRITE 
BDESU_ACCESS_EXECUTE 
BDESU_ACCESS_READ_WRITE 
BDESU_ACCESS_READ_EXECUTE 
BDESU_ACCESS_WRITE_EXECUTE 
BDESU_ACCESS_READ_WRITE_EXECUTE 
ACCESS_READ 
ACCESS_WRITE 
ACCESS_EXECUTE 
ACCESS_NONE 
ACCESS_READ_WRITE 
ACCESS_READ_EXECUTE 
ACCESS_WRITE_EXECUTE 
ACCESS_READ_WRITE_EXECUTE 

Member Function Documentation

◆ allocate()

static void * bdls::MemoryUtil::allocate ( int  numBytes)
static

Allocate an area of memory of the specified size numBytes, aligned on a page boundary. Return a pointer to allocated memory on success, and a null pointer otherwise. Note that the allocated memory is readable and writable, and read/write access to this memory, if revoked, must be restored before deallocation.

◆ deallocate()

static int bdls::MemoryUtil::deallocate ( void *  address)
static

Deallocate a memory area at the specified address previously allocated with the allocate method. Return 0 on success, and a nonzero value otherwise. The behavior is undefined if read or write access to any memory in this area has been revoked and not restored. Note that deallocating memory does not change memory protection.

◆ pageSize()

static int bdls::MemoryUtil::pageSize ( )
static

◆ protect()

static int bdls::MemoryUtil::protect ( void *  address,
int  numBytes,
int  mode 
)
static

Change the access protection on a region of memory starting at the specified address and numBytes long, according to specified mode, making memory readable if (mode & ACCESS_READ) is nonzero and writable if (mode & ACCESS_WRITE) is nonzero. Return 0 on success, and a nonzero value otherwise. The behavior is undefined if addr is not aligned on a page boundary, if numBytes is not a multiple of pageSize(), or if numBytes is 0. Note that some platforms do not support certain protection modes, e.g., on some platforms the memory cannot be made writable but unreadable, or readable but non-executable. On these platforms the actual access protection set on the region might be more permissive than the specified one. Also note that most memory allocators do not expect memory protection on allocated memory to be changed, so you must reset protection back to ACCESS_READ_WRITE before releasing the memory.


The documentation for this struct was generated from the following file: