ACE  6.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Macros | Typedefs
OS_Memory.h File Reference
#include "ace/OS_Errno.h"
#include "ace/Basic_Types.h"
#include "ace/os_include/os_stddef.h"
#include "ace/OS_NS_stdlib.h"

Classes

class  ACE_bad_alloc_class
 

Macros

#define ACE_MALLOC_FUNC   ::malloc
 
#define ACE_CALLOC_FUNC   ::calloc
 
#define ACE_FREE_FUNC   ::free
 
#define ACE_REALLOC_FUNC   ::realloc
 
#define ACE_del_bad_alloc
 
#define ACE_NEW_RETURN(POINTER, CONSTRUCTOR, RET_VAL)
 
#define ACE_NEW(POINTER, CONSTRUCTOR)
 
#define ACE_NEW_NORETURN(POINTER, CONSTRUCTOR)
 
#define ACE_bad_alloc   ACE_bad_alloc_class
 
#define ACE_throw_bad_alloc   return 0
 

Typedefs

typedef void * ACE_MALLOC_T
 

Functions

Efficiently compute aligned pointers to powers of 2 boundaries.
uintptr_t ACE_align_binary (uintptr_t ptr, uintptr_t alignment)
 Return the next integer aligned to a required boundary. More...
 
char * ACE_ptr_align_binary (char const *ptr, uintptr_t alignment)
 Return the next address aligned to a required boundary. More...
 
char * ACE_ptr_align_binary (unsigned char const *ptr, uintptr_t alignment)
 Return the next address aligned to a required boundary. More...
 

Detailed Description

Id:
OS_Memory.h 91688 2010-09-09 11:21:50Z johnnyw
Author
Doug Schmidt schmi.nosp@m.dt@c.nosp@m.s.wus.nosp@m.tl.e.nosp@m.du
Jesper S. M|llerstoph.nosp@m.ph@d.nosp@m.iku.d.nosp@m.k
and a cast of thousands...

Macro Definition Documentation

#define ACE_bad_alloc   ACE_bad_alloc_class
#define ACE_CALLOC_FUNC   ::calloc
#define ACE_del_bad_alloc
#define ACE_FREE_FUNC   ::free
#define ACE_MALLOC_FUNC   ::malloc
#define ACE_NEW (   POINTER,
  CONSTRUCTOR 
)
Value:
do { POINTER = new CONSTRUCTOR; \
if (POINTER == 0) { errno = ENOMEM; return; } \
} while (0)
#define ACE_NEW_NORETURN (   POINTER,
  CONSTRUCTOR 
)
Value:
do { POINTER = new CONSTRUCTOR; \
if (POINTER == 0) { errno = ENOMEM; } \
} while (0)
#define ACE_NEW_RETURN (   POINTER,
  CONSTRUCTOR,
  RET_VAL 
)
Value:
do { POINTER = new CONSTRUCTOR; \
if (POINTER == 0) { errno = ENOMEM; return RET_VAL; } \
} while (0)
#define ACE_REALLOC_FUNC   ::realloc
#define ACE_throw_bad_alloc   return 0

Typedef Documentation

typedef void* ACE_MALLOC_T

Function Documentation

uintptr_t ACE_align_binary ( uintptr_t  ptr,
uintptr_t  alignment 
)
inline

Return the next integer aligned to a required boundary.

Efficiently align "value" up to "alignment", knowing that all such boundaries are binary powers and that we're using two's complement arithmetic.

Since the alignment is a power of two its binary representation is:

alignment = 0...010...0

hence

alignment - 1 = 0...001...1 = T1

so the complement is:

~(alignment - 1) = 1...110...0 = T2

Notice that there is a multiple of alignment in the range [

,

+ T1], also notice that if

X = (

+ T1 ) & T2

then

<= X <=

+ T1

because the & operator only changes the last bits, and since X is a multiple of alignment (its last bits are zero) we have found the multiple we wanted.

Parameters
ptrthe base pointer
alignmentthe required alignment
char* ACE_ptr_align_binary ( char const *  ptr,
uintptr_t  alignment 
)
inline

Return the next address aligned to a required boundary.

char* ACE_ptr_align_binary ( unsigned char const *  ptr,
uintptr_t  alignment 
)
inline

Return the next address aligned to a required boundary.