mirror of
https://github.com/postgres/postgres.git
synced 2025-11-18 02:02:55 +03:00
New alloc set code using a memory block pool for small allocations.
Jan
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: memutils.h,v 1.19 1998/12/26 18:15:53 momjian Exp $
|
||||
* $Id: memutils.h,v 1.20 1999/02/06 16:50:33 wieck Exp $
|
||||
*
|
||||
* NOTES
|
||||
* some of the information in this file will be moved to
|
||||
@@ -208,13 +208,41 @@ typedef enum AllocMode
|
||||
|
||||
#define DefaultAllocMode DynamicAllocMode
|
||||
|
||||
/*
|
||||
* AllocBlock --
|
||||
* Small pieces of memory are taken from bigger blocks of
|
||||
* memory with a size aligned to a power of two. These
|
||||
* pieces are not free's separately, instead they are reused
|
||||
* for the next allocation of a fitting size.
|
||||
*/
|
||||
typedef struct AllocBlockData {
|
||||
struct AllocSetData *aset;
|
||||
struct AllocBlockData *next;
|
||||
char *freeptr;
|
||||
char *endptr;
|
||||
} AllocBlockData;
|
||||
|
||||
typedef AllocBlockData *AllocBlock;
|
||||
|
||||
/*
|
||||
* AllocChunk --
|
||||
* The prefix of each piece of memory in an AllocBlock
|
||||
*/
|
||||
typedef struct AllocChunkData {
|
||||
void *aset;
|
||||
Size size;
|
||||
} AllocChunkData;
|
||||
|
||||
typedef AllocChunkData *AllocChunk;
|
||||
|
||||
/*
|
||||
* AllocSet --
|
||||
* Allocation set.
|
||||
*/
|
||||
typedef struct AllocSetData
|
||||
{
|
||||
OrderedSetData setData;
|
||||
struct AllocBlockData *blocks;
|
||||
struct AllocChunkData *freelist[8];
|
||||
/* Note: this will change in the future to support other modes */
|
||||
} AllocSetData;
|
||||
|
||||
|
||||
@@ -6,18 +6,34 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: palloc.h,v 1.6 1998/09/01 04:39:24 momjian Exp $
|
||||
* $Id: palloc.h,v 1.7 1999/02/06 16:50:34 wieck Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef PALLOC_H
|
||||
#define PALLOC_H
|
||||
|
||||
#include <c.h>
|
||||
#include "c.h"
|
||||
|
||||
extern void *palloc(Size size);
|
||||
extern void pfree(void *pointer);
|
||||
extern void *repalloc(void *pointer, Size size);
|
||||
#ifdef PALLOC_IS_MALLOC
|
||||
|
||||
# define palloc(s) malloc(s)
|
||||
# define pfree(p) free(p)
|
||||
# define repalloc(p,s) realloc((p),(s))
|
||||
|
||||
#else /* ! PALLOC_IS_MALLOC */
|
||||
|
||||
/* ----------
|
||||
* In the case we use memory contexts, use macro's for palloc() etc.
|
||||
* ----------
|
||||
*/
|
||||
# include "utils/mcxt.h"
|
||||
|
||||
# define palloc(s) ((void *)MemoryContextAlloc(CurrentMemoryContext,(Size)(s)))
|
||||
# define pfree(p) MemoryContextFree(CurrentMemoryContext,(Pointer)(p))
|
||||
# define repalloc(p,s) ((void *)MemoryContextRealloc(CurrentMemoryContext,(Pointer)(p),(Size)(s)))
|
||||
|
||||
#endif /* PALLOC_IS_MALLOC */
|
||||
|
||||
/* like strdup except uses palloc */
|
||||
extern char *pstrdup(char *pointer);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: portal.h,v 1.10 1998/09/01 04:39:25 momjian Exp $
|
||||
* $Id: portal.h,v 1.11 1999/02/06 16:50:34 wieck Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -44,8 +44,8 @@ typedef PortalD *Portal;
|
||||
struct PortalD
|
||||
{
|
||||
char *name; /* XXX PortalName */
|
||||
struct PortalVariableMemory variable;
|
||||
struct PortalHeapMemory heap;
|
||||
struct PortalVariableMemoryData variable;
|
||||
struct PortalHeapMemoryData heap;
|
||||
QueryDesc *queryDesc;
|
||||
TupleDesc attinfo;
|
||||
EState *state;
|
||||
|
||||
Reference in New Issue
Block a user