Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef MEMUTILS_H
00018 #define MEMUTILS_H
00019
00020 #include "nodes/memnodes.h"
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #define MaxAllocSize ((Size) 0x3fffffff)
00041
00042 #define AllocSizeIsValid(size) ((Size) (size) <= MaxAllocSize)
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 typedef struct StandardChunkHeader
00054 {
00055 MemoryContext context;
00056 Size size;
00057 #ifdef MEMORY_CONTEXT_CHECKING
00058
00059 Size requested_size;
00060 #endif
00061 } StandardChunkHeader;
00062
00063 #define STANDARDCHUNKHEADERSIZE MAXALIGN(sizeof(StandardChunkHeader))
00064
00065
00066
00067
00068
00069
00070
00071
00072 extern PGDLLIMPORT MemoryContext TopMemoryContext;
00073 extern PGDLLIMPORT MemoryContext ErrorContext;
00074 extern PGDLLIMPORT MemoryContext PostmasterContext;
00075 extern PGDLLIMPORT MemoryContext CacheMemoryContext;
00076 extern PGDLLIMPORT MemoryContext MessageContext;
00077 extern PGDLLIMPORT MemoryContext TopTransactionContext;
00078 extern PGDLLIMPORT MemoryContext CurTransactionContext;
00079
00080
00081 extern PGDLLIMPORT MemoryContext PortalContext;
00082
00083
00084
00085
00086
00087 extern void MemoryContextInit(void);
00088 extern void MemoryContextReset(MemoryContext context);
00089 extern void MemoryContextDelete(MemoryContext context);
00090 extern void MemoryContextResetChildren(MemoryContext context);
00091 extern void MemoryContextDeleteChildren(MemoryContext context);
00092 extern void MemoryContextResetAndDeleteChildren(MemoryContext context);
00093 extern void MemoryContextSetParent(MemoryContext context,
00094 MemoryContext new_parent);
00095 extern Size GetMemoryChunkSpace(void *pointer);
00096 extern MemoryContext GetMemoryChunkContext(void *pointer);
00097 extern MemoryContext MemoryContextGetParent(MemoryContext context);
00098 extern bool MemoryContextIsEmpty(MemoryContext context);
00099 extern void MemoryContextStats(MemoryContext context);
00100
00101 #ifdef MEMORY_CONTEXT_CHECKING
00102 extern void MemoryContextCheck(MemoryContext context);
00103 #endif
00104 extern bool MemoryContextContains(MemoryContext context, void *pointer);
00105
00106
00107
00108
00109
00110
00111 extern MemoryContext MemoryContextCreate(NodeTag tag, Size size,
00112 MemoryContextMethods *methods,
00113 MemoryContext parent,
00114 const char *name);
00115
00116
00117
00118
00119
00120
00121
00122 extern MemoryContext AllocSetContextCreate(MemoryContext parent,
00123 const char *name,
00124 Size minContextSize,
00125 Size initBlockSize,
00126 Size maxBlockSize);
00127
00128
00129
00130
00131
00132 #define ALLOCSET_DEFAULT_MINSIZE 0
00133 #define ALLOCSET_DEFAULT_INITSIZE (8 * 1024)
00134 #define ALLOCSET_DEFAULT_MAXSIZE (8 * 1024 * 1024)
00135
00136
00137
00138
00139
00140 #define ALLOCSET_SMALL_MINSIZE 0
00141 #define ALLOCSET_SMALL_INITSIZE (1 * 1024)
00142 #define ALLOCSET_SMALL_MAXSIZE (8 * 1024)
00143
00144 #endif