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_BLOCKOFFSET_MASK   UINT64CONST(0x3FFFFFFE)
 
#define MEMORYCHUNK_EXTERNAL_BASEBIT   MEMORY_CONTEXT_METHODID_BITS
 
#define MEMORYCHUNK_VALUE_BASEBIT   (MEMORYCHUNK_EXTERNAL_BASEBIT + 1)
 
#define MEMORYCHUNK_BLOCKOFFSET_BASEBIT   (MEMORYCHUNK_VALUE_BASEBIT + 29)
 
#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_BLOCKOFFSET_MASK)
 
#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_BLOCKOFFSET_MASK)

Definition at line 151 of file memutils_memorychunk.h.

◆ HdrMaskCheckMagic

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

Definition at line 155 of file memutils_memorychunk.h.

◆ HdrMaskGetValue

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

Definition at line 144 of file memutils_memorychunk.h.

◆ HdrMaskIsExternal

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

Definition at line 142 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_BLOCKOFFSET_BASEBIT

#define MEMORYCHUNK_BLOCKOFFSET_BASEBIT   (MEMORYCHUNK_VALUE_BASEBIT + 29)

Definition at line 113 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_BLOCKOFFSET_MASK

#define MEMORYCHUNK_BLOCKOFFSET_MASK   UINT64CONST(0x3FFFFFFE)

Definition at line 108 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_EXTERNAL_BASEBIT

#define MEMORYCHUNK_EXTERNAL_BASEBIT   MEMORY_CONTEXT_METHODID_BITS

Definition at line 111 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_MAGIC

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

Definition at line 120 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_MAX_BLOCKOFFSET

#define MEMORYCHUNK_MAX_BLOCKOFFSET   UINT64CONST(0x3FFFFFFF)

Definition at line 102 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_MAX_VALUE

#define MEMORYCHUNK_MAX_VALUE   UINT64CONST(0x3FFFFFFF)

Definition at line 96 of file memutils_memorychunk.h.

◆ MEMORYCHUNK_VALUE_BASEBIT

#define MEMORYCHUNK_VALUE_BASEBIT   (MEMORYCHUNK_EXTERNAL_BASEBIT + 1)

Definition at line 112 of file memutils_memorychunk.h.

◆ MemoryChunkGetPointer

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

Definition at line 138 of file memutils_memorychunk.h.

◆ PointerGetMemoryChunk

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

Definition at line 135 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 204 of file memutils_memorychunk.h.

205 {
206  /*
207  * External chunks should always store MEMORYCHUNK_MAGIC in the upper
208  * portion of the hdrmask, check that nothing has stomped on that.
209  */
210  Assert(!HdrMaskIsExternal(chunk->hdrmask) ||
211  HdrMaskCheckMagic(chunk->hdrmask));
212 
213  return HdrMaskIsExternal(chunk->hdrmask);
214 }
#define HdrMaskCheckMagic(hdrmask)

References Assert, chunk, 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 169 of file memutils_memorychunk.h.

171 {
172  Size blockoffset = (char *) chunk - (char *) block;
173 
174  Assert((char *) chunk >= (char *) block);
175  Assert((blockoffset & MEMORYCHUNK_BLOCKOFFSET_MASK) == blockoffset);
177  Assert((int) methodid <= MEMORY_CONTEXT_METHODID_MASK);
178 
179  chunk->hdrmask = (((uint64) blockoffset) << MEMORYCHUNK_BLOCKOFFSET_BASEBIT) |
180  (((uint64) value) << MEMORYCHUNK_VALUE_BASEBIT) |
181  methodid;
182 }
size_t Size
Definition: c.h:605
static struct @155 value
#define MEMORY_CONTEXT_METHODID_MASK
#define MEMORYCHUNK_MAX_VALUE
#define MEMORYCHUNK_BLOCKOFFSET_MASK
#define MEMORYCHUNK_BLOCKOFFSET_BASEBIT

References Assert, chunk, MEMORY_CONTEXT_METHODID_MASK, MEMORYCHUNK_BLOCKOFFSET_BASEBIT, MEMORYCHUNK_BLOCKOFFSET_MASK, MEMORYCHUNK_MAX_VALUE, MEMORYCHUNK_VALUE_BASEBIT, and value.

Referenced by AllocSetAllocChunkFromBlock(), AllocSetAllocFromNewBlock(), BumpAllocChunkFromBlock(), GenerationAllocChunkFromBlock(), MemoryContextAllocAligned(), and SlabAllocSetupNewChunk().

◆ MemoryChunkSetHdrMaskExternal()

static void MemoryChunkSetHdrMaskExternal ( MemoryChunk chunk,
MemoryContextMethodID  methodid 
)
inlinestatic

Definition at line 190 of file memutils_memorychunk.h.

192 {
193  Assert((int) methodid <= MEMORY_CONTEXT_METHODID_MASK);
194 
195  chunk->hdrmask = MEMORYCHUNK_MAGIC | (((uint64) 1) << MEMORYCHUNK_EXTERNAL_BASEBIT) |
196  methodid;
197 }
#define MEMORYCHUNK_EXTERNAL_BASEBIT

References Assert, chunk, MEMORY_CONTEXT_METHODID_MASK, MEMORYCHUNK_EXTERNAL_BASEBIT, and MEMORYCHUNK_MAGIC.

Referenced by AllocSetAllocLarge(), BumpAllocLarge(), and GenerationAllocLarge().