PostgreSQL Source Code git master
Loading...
Searching...
No Matches
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 voidMemoryChunkGetBlock (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.

170{
171 Size blockoffset = (char *) chunk - (char *) block;
172
173 Assert((char *) chunk >= (char *) block);
177
180 methodid;
181}
182
183/*
184 * MemoryChunkSetHdrMaskExternal
185 * Set 'chunk' as an externally managed chunk. Here we only record the
186 * MemoryContextMethodID and set the external chunk bit.
187 */
188static inline void
191{
193
195 methodid;
196}
197
198/*
199 * MemoryChunkIsExternal
200 * Return true if 'chunk' is marked as external.
201 */
202static inline bool
204{
205 /*
206 * External chunks should always store MEMORYCHUNK_MAGIC in the upper
207 * portion of the hdrmask, check that nothing has stomped on that.
208 */
209 Assert(!HdrMaskIsExternal(chunk->hdrmask) ||
210 HdrMaskCheckMagic(chunk->hdrmask));
211
212 return HdrMaskIsExternal(chunk->hdrmask);
213}
214
215/*
216 * MemoryChunkGetValue
217 * For non-external chunks, returns the value field as it was set in
218 * MemoryChunkSetHdrMask.
219 */
220static inline Size
222{
223 Assert(!HdrMaskIsExternal(chunk->hdrmask));
224
225 return HdrMaskGetValue(chunk->hdrmask);
226}
227
228/*
229 * MemoryChunkGetBlock
230 * For non-external chunks, returns the pointer to the block as was set
231 * in MemoryChunkSetHdrMask.
232 */
233static inline void *
235{
236 Assert(!HdrMaskIsExternal(chunk->hdrmask));
237
238 return (void *) ((char *) chunk - HdrMaskBlockOffset(chunk->hdrmask));
239}
240
241/* cleanup all internal definitions */
242#undef MEMORYCHUNK_BLOCKOFFSET_MASK
243#undef MEMORYCHUNK_EXTERNAL_BASEBIT
244#undef MEMORYCHUNK_VALUE_BASEBIT
245#undef MEMORYCHUNK_BLOCKOFFSET_BASEBIT
246#undef MEMORYCHUNK_MAGIC
247#undef HdrMaskIsExternal
248#undef HdrMaskGetValue
249#undef HdrMaskBlockOffset
250#undef HdrMaskCheckMagic
251
252#endif /* MEMUTILS_MEMORYCHUNK_H */
#define Assert(condition)
Definition c.h:873
uint64_t uint64
Definition c.h:547
size_t Size
Definition c.h:619
static struct @172 value
#define MEMORY_CONTEXT_METHODID_MASK
MemoryContextMethodID
#define MEMORYCHUNK_MAX_VALUE
static Size MemoryChunkGetValue(MemoryChunk *chunk)
#define MEMORYCHUNK_VALUE_BASEBIT
#define MEMORYCHUNK_BLOCKOFFSET_MASK
#define MEMORYCHUNK_EXTERNAL_BASEBIT
#define HdrMaskBlockOffset(hdrmask)
static bool MemoryChunkIsExternal(MemoryChunk *chunk)
static void * MemoryChunkGetBlock(MemoryChunk *chunk)
static void MemoryChunkSetHdrMaskExternal(MemoryChunk *chunk, MemoryContextMethodID methodid)
#define HdrMaskCheckMagic(hdrmask)
#define HdrMaskIsExternal(hdrmask)
#define MEMORYCHUNK_BLOCKOFFSET_BASEBIT
#define MEMORYCHUNK_MAGIC
#define HdrMaskGetValue(hdrmask)
static int fb(int x)

◆ HdrMaskCheckMagic

#define HdrMaskCheckMagic (   hdrmask)
Value:

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) >> \
#define UINT64CONST(x)
Definition c.h:561

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

Function Documentation

◆ MemoryChunkGetBlock()

◆ MemoryChunkGetValue()

◆ 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}

References Assert, fb(), HdrMaskCheckMagic, and HdrMaskIsExternal.

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

◆ MemoryChunkSetHdrMask()

◆ MemoryChunkSetHdrMaskExternal()

static void MemoryChunkSetHdrMaskExternal ( MemoryChunk chunk,
MemoryContextMethodID  methodid 
)
inlinestatic