forked from blender/blender
Aras Pranckevicius
3f0b9e4a58
Update from version 4.65 (2009) to latest 23.01 (2023). LZMA is only used for pointcache "Heavy" compression option. With updated SDK, testing in a 100k particle system point cache (Windows/Ryzen5950X), average times to read or write a cached frame: - Read a bit faster, 24.3 -> 23.2ms - Write/bake about 2x faster, 237 -> 103ms Pull Request: blender/blender#118433
72 lines
1.7 KiB
C++
72 lines
1.7 KiB
C++
/* Alloc.h -- Memory allocation functions
|
|
2023-03-04 : Igor Pavlov : Public domain */
|
|
|
|
#ifndef ZIP7_INC_ALLOC_H
|
|
#define ZIP7_INC_ALLOC_H
|
|
|
|
#include "7zTypes.h"
|
|
|
|
EXTERN_C_BEGIN
|
|
|
|
/*
|
|
MyFree(NULL) : is allowed, as free(NULL)
|
|
MyAlloc(0) : returns NULL : but malloc(0) is allowed to return NULL or non_NULL
|
|
MyRealloc(NULL, 0) : returns NULL : but realloc(NULL, 0) is allowed to return NULL or non_NULL
|
|
MyRealloc() is similar to realloc() for the following cases:
|
|
MyRealloc(non_NULL, 0) : returns NULL and always calls MyFree(ptr)
|
|
MyRealloc(NULL, non_ZERO) : returns NULL, if allocation failed
|
|
MyRealloc(non_NULL, non_ZERO) : returns NULL, if reallocation failed
|
|
*/
|
|
|
|
void *MyAlloc(size_t size);
|
|
void MyFree(void *address);
|
|
void *MyRealloc(void *address, size_t size);
|
|
|
|
#ifdef _WIN32
|
|
|
|
#ifdef Z7_LARGE_PAGES
|
|
void SetLargePageSize(void);
|
|
#endif
|
|
|
|
void *MidAlloc(size_t size);
|
|
void MidFree(void *address);
|
|
void *BigAlloc(size_t size);
|
|
void BigFree(void *address);
|
|
|
|
#else
|
|
|
|
#define MidAlloc(size) MyAlloc(size)
|
|
#define MidFree(address) MyFree(address)
|
|
#define BigAlloc(size) MyAlloc(size)
|
|
#define BigFree(address) MyFree(address)
|
|
|
|
#endif
|
|
|
|
extern const ISzAlloc g_Alloc;
|
|
|
|
#ifdef _WIN32
|
|
extern const ISzAlloc g_BigAlloc;
|
|
extern const ISzAlloc g_MidAlloc;
|
|
#else
|
|
#define g_BigAlloc g_AlignedAlloc
|
|
#define g_MidAlloc g_AlignedAlloc
|
|
#endif
|
|
|
|
extern const ISzAlloc g_AlignedAlloc;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
ISzAlloc vt;
|
|
ISzAllocPtr baseAlloc;
|
|
unsigned numAlignBits; /* ((1 << numAlignBits) >= sizeof(void *)) */
|
|
size_t offset; /* (offset == (k * sizeof(void *)) && offset < (1 << numAlignBits) */
|
|
} CAlignOffsetAlloc;
|
|
|
|
void AlignOffsetAlloc_CreateVTable(CAlignOffsetAlloc *p);
|
|
|
|
|
|
EXTERN_C_END
|
|
|
|
#endif
|