This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/H/alloc.h
vsc eea9f2a58e get rid of IntArrays and FloatArray code.
include holes when calculating memory usage.


git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1640 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
2006-05-19 14:31:32 +00:00

140 lines
2.9 KiB
C

/*************************************************************************
* *
* YAP Prolog %W% %G% *
* *
* Yap Prolog was developed at NCCUP - Universidade do Porto *
* *
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
* *
**************************************************************************
* *
* File: alloc.h *
* Last rev: *
* mods: *
* comments: allocating space *
* *
*************************************************************************/
/* Space Organization:
The data areas is divided in the following way:
Lower Addresses
HeapBase \
| Atom and code space
HeapTop-1 /
HeapTop \
| Free Space
HeapMax /
GlobalBase-1/
GlobalBase \
| Global Stack
H /
ASP \
| Local stack
LocalBase /
TRBase /
TR \
| Trail
Higher Adresses
*/
/* definitions required by saver/restorer and memory manager */
typedef CELL YAP_SEG_SIZE;
typedef struct FREEB {
YAP_SEG_SIZE b_size;
struct FREEB *b_next;
struct FREEB *b_next_size;
} BlockHeader;
#define MinBlockSize (sizeof(BlockHeader)+sizeof(YAP_SEG_SIZE))
#define MaxBlockSize 0xffffff
#define InUseFlag 0x80000000
/* the following defines are machine dependant and are used to enforce
the correct alignment for allocated blocks */
#if SIZEOF_INT_P==4
#define YAP_ALIGN 3
#define YAP_ALIGNMASK 0xfffffffc
#else
#define YAP_ALIGN 7
#define YAP_ALIGNMASK 0xfffffff8L
#endif /* ALIGN_LONGS */
#define AdjustSize(X) ((X+YAP_ALIGN) & YAP_ALIGNMASK)
#define ALIGN_YAPTYPE(X,TYPE) (((CELL)(X)+(sizeof(TYPE)-1)) & ~(sizeof(TYPE)-1))
/* SIZE should be a power of 2 */
#define ALIGN_SIZE(X,SIZE) (((CELL)(X)+((SIZE)-1)) & ~((SIZE)-1))
/* I'll assume page size is always a power of two */
#if _WIN32
/* in WIN32 VirtualAlloc works in multiples of 64K */
#define ALLOC_SIZE (64*1024)
#define AdjustPageSize(X) (((X)+ (ALLOC_SIZE-1))/ALLOC_SIZE)*ALLOC_SIZE;
#else
#define AdjustPageSize(X) ((X) & (Yap_page_size-1) ? \
((X) + Yap_page_size) & (~(Yap_page_size-1)) : \
(X) )
#endif
#define BlockTrailer(b) ((YAP_SEG_SIZE *)b)[((BlockHeader *) b)->b_size]
/* Operating system and architecture dependent page size */
extern int Yap_page_size;
void STD_PROTO(Yap_InitHeap, (void *));
UInt STD_PROTO(Yap_ExtendWorkSpaceThroughHole, (UInt));
void STD_PROTO(Yap_AllocHole, (UInt, UInt));
#if USE_MMAP
#include <sys/types.h>
#include <sys/mman.h>
#elif USE_SHM
#elif USE_SBRK
#if (defined(__svr4__) || defined(__SVR4))
#include <unistd.h>
#elif sun
#include <sys/types.h>
#include <malloc.h>
void *sbrk(caddr_t);
typedef unsigned size_t;
MALLOC_T malloc(size_t);
void free(MALLOC_T);
MALLOC_T realloc(MALLOC_T,size_t);
MALLOC_T calloc(size_t,size_t);
#endif
#else
#endif
void Yap_add_memory_hole(ADDR, ADDR);
#define SCRATCH_START_SIZE (64*1024L)
#define SCRATCH_INC_SIZE (64*1024L)