PostgreSQL Source Code  git master
memutils_memorychunk.h File Reference
Include dependency graph for memutils_memorychunk.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  MemoryChunk
 

Macros

#define MEMORYCHUNK_MAX_VALUE   UINT64CONST(0x3FFFFFFF)
 
#define MEMORYCHUNK_MAX_BLOCKOFFSET   UINT64CONST(0x3FFFFFFF)
 
#define MEMORYCHUNK_EXTERNAL_BASEBIT   MEMORY_CONTEXT_METHODID_BITS
 
#define MEMORYCHUNK_VALUE_BASEBIT   (MEMORYCHUNK_EXTERNAL_BASEBIT + 1)
 
#define MEMORYCHUNK_BLOCKOFFSET_BASEBIT   (MEMORYCHUNK_VALUE_BASEBIT + 30)
 
#define MEMORYCHUNK_MAGIC
 
#define PointerGetMemoryChunk(p)    ((MemoryChunk *) ((char *) (p) - sizeof(MemoryChunk)))
 
#define MemoryChunkGetPointer(c)    ((void *) ((char *) (c) + sizeof(MemoryChunk)))
 
#define HdrMaskIsExternal(hdrmask)    ((hdrmask) & (((uint64) 1) << MEMORYCHUNK_EXTERNAL_BASEBIT))
 
#define HdrMaskGetValue(hdrmask)    (((hdrmask) >> MEMORYCHUNK_VALUE_BASEBIT) & MEMORYCHUNK_MAX_VALUE)
 
#define HdrMaskBlockOffset(hdrmask)    (((hdrmask) >> MEMORYCHUNK_BLOCKOFFSET_BASEBIT) & MEMORYCHUNK_MAX_BLOCKOFFSET)
 
#define HdrMaskCheckMagic(hdrmask)
 

Typedefs

typedef struct MemoryChunk MemoryChunk
 

Functions

static void MemoryChunkSetHdrMask (MemoryChunk *chunk, void *block, Size value, MemoryContextMethodID methodid)
 
static void MemoryChunkSetHdrMaskExternal (MemoryChunk *chunk, MemoryContextMethodID methodid)
 
static bool MemoryChunkIsExternal (MemoryChunk *chunk)
 
static Size MemoryChunkGetValue (MemoryChunk *chunk)
 
static void * MemoryChunkGetBlock (MemoryChunk *chunk)
 

Macro Definition Documentation

◆ HdrMaskBlockOffset

#define HdrMaskBlockOffset (   hdrmask)     (((hdrmask) >> MEMORYCHUNK_BLOCKOFFSET_BASEBIT) & MEMORYCHUNK_MAX_BLOCKOFFSET)

Definition at line 137 of file memutils_memorychunk.h.

◆ HdrMaskCheckMagic

#define HdrMaskCheckMagic (   hdrmask)
Value:
#define MEMORYCHUNK_VALUE_BASEBIT
#define MEMORYCHUNK_MAGIC

Definition at line 141 of file memutils_memorychunk.h.

◆ HdrMaskGetValue

#define HdrMaskGetValue (   hdrmask)     (((hdrmask) >> MEMORYCHUNK_VALUE_BASEBIT) & MEMORYCHUNK_MAX_VALUE)

Definition at line 130 of file memutils_memorychunk.h.

◆ HdrMaskIsExternal

#define HdrMaskIsExternal (   hdrmask)     ((hdrmask) & (((uint64) 1) << MEMORYCHUNK_EXTERNAL_BASEBIT))

Definition at line 128 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_BLOCKOFFSET_BASEBIT

#define MEMORYCHUNK_BLOCKOFFSET_BASEBIT   (MEMORYCHUNK_VALUE_BASEBIT + 30)

Definition at line 99 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_EXTERNAL_BASEBIT

#define MEMORYCHUNK_EXTERNAL_BASEBIT   MEMORY_CONTEXT_METHODID_BITS

Definition at line 97 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_MAGIC

#define MEMORYCHUNK_MAGIC
Value:
(UINT64CONST(0xB1A8DB858EB6EFBA) >> \
MEMORYCHUNK_VALUE_BASEBIT << \
MEMORYCHUNK_VALUE_BASEBIT)

Definition at line 106 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_MAX_BLOCKOFFSET

#define MEMORYCHUNK_MAX_BLOCKOFFSET   UINT64CONST(0x3FFFFFFF)

Definition at line 94 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_MAX_VALUE

#define MEMORYCHUNK_MAX_VALUE   UINT64CONST(0x3FFFFFFF)

Definition at line 88 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_VALUE_BASEBIT

#define MEMORYCHUNK_VALUE_BASEBIT   (MEMORYCHUNK_EXTERNAL_BASEBIT + 1)

Definition at line 98 of file memutils_memorychunk.h.

◆ MemoryChunkGetPointer

#define MemoryChunkGetPointer (   c)     ((void *) ((char *) (c) + sizeof(MemoryChunk)))

Definition at line 124 of file memutils_memorychunk.h.

◆ PointerGetMemoryChunk

#define PointerGetMemoryChunk (   p)     ((MemoryChunk *) ((char *) (p) - sizeof(MemoryChunk)))

Definition at line 121 of file memutils_memorychunk.h.

Typedef Documentation

◆ MemoryChunk

typedef struct MemoryChunk MemoryChunk

Function Documentation

◆ MemoryChunkGetBlock()

static void* MemoryChunkGetBlock ( MemoryChunk chunk)
inlinestatic

◆ MemoryChunkGetValue()

static Size MemoryChunkGetValue ( MemoryChunk chunk)
inlinestatic

◆ MemoryChunkIsExternal()

static bool MemoryChunkIsExternal ( MemoryChunk chunk)
inlinestatic

Definition at line 189 of file memutils_memorychunk.h.

190 {
191  /*
192  * External chunks should always store MEMORYCHUNK_MAGIC in the upper
193  * portion of the hdrmask, check that nothing has stomped on that.
194  */
195  Assert(!HdrMaskIsExternal(chunk->hdrmask) ||
196  HdrMaskCheckMagic(chunk->hdrmask));
197 
198  return HdrMaskIsExternal(chunk->hdrmask);
199 }
#define HdrMaskCheckMagic(hdrmask)

References Assert(), MemoryChunk::hdrmask, HdrMaskCheckMagic, and HdrMaskIsExternal.

Referenced by AlignedAllocFree(), AlignedAllocGetChunkContext(), AllocSetFree(), AllocSetGetChunkContext(), AllocSetGetChunkSpace(), AllocSetRealloc(), GenerationFree(), GenerationGetChunkContext(), GenerationGetChunkSpace(), and GenerationRealloc().

◆ MemoryChunkSetHdrMask()

static void MemoryChunkSetHdrMask ( MemoryChunk chunk,
void *  block,
Size  value,
MemoryContextMethodID  methodid 
)
inlinestatic

Definition at line 154 of file memutils_memorychunk.h.

156 {
157  Size blockoffset = (char *) chunk - (char *) block;
158 
159  Assert((char *) chunk >= (char *) block);
160  Assert(blockoffset <= MEMORYCHUNK_MAX_BLOCKOFFSET);
162  Assert((int) methodid <= MEMORY_CONTEXT_METHODID_MASK);
163 
164  chunk->hdrmask = (((uint64) blockoffset) << MEMORYCHUNK_BLOCKOFFSET_BASEBIT) |
165  (((uint64) value) << MEMORYCHUNK_VALUE_BASEBIT) |
166  methodid;
167 }
size_t Size
Definition: c.h:589
static struct @147 value
#define MEMORY_CONTEXT_METHODID_MASK
#define MEMORYCHUNK_MAX_BLOCKOFFSET
#define MEMORYCHUNK_MAX_VALUE
#define MEMORYCHUNK_BLOCKOFFSET_BASEBIT

References Assert(), MemoryChunk::hdrmask, MEMORY_CONTEXT_METHODID_MASK, MEMORYCHUNK_BLOCKOFFSET_BASEBIT, MEMORYCHUNK_MAX_BLOCKOFFSET, MEMORYCHUNK_MAX_VALUE, MEMORYCHUNK_VALUE_BASEBIT, and value.

Referenced by AllocSetAlloc(), GenerationAlloc(), MemoryContextAllocAligned(), and SlabAlloc().

◆ MemoryChunkSetHdrMaskExternal()

static void MemoryChunkSetHdrMaskExternal ( MemoryChunk chunk,
MemoryContextMethodID  methodid 
)
inlinestatic

Definition at line 175 of file memutils_memorychunk.h.

177 {
178  Assert((int) methodid <= MEMORY_CONTEXT_METHODID_MASK);
179 
180  chunk->hdrmask = MEMORYCHUNK_MAGIC | (((uint64) 1) << MEMORYCHUNK_EXTERNAL_BASEBIT) |
181  methodid;
182 }
#define MEMORYCHUNK_EXTERNAL_BASEBIT

References Assert(), MemoryChunk::hdrmask, MEMORY_CONTEXT_METHODID_MASK, MEMORYCHUNK_EXTERNAL_BASEBIT, and MEMORYCHUNK_MAGIC.

Referenced by AllocSetAlloc(), and GenerationAlloc().