Cleanup: remove legacy mmap memory allocation for 32 bit
This helped to go beyond the 4GB limit, but is no longer relevant for 64 bit.
This commit is contained in:
parent
33fc42bd65
commit
120e9924c1
|
@ -145,14 +145,6 @@ extern void *(*MEM_mallocN_aligned)(size_t len,
|
|||
const char *str) /* ATTR_MALLOC */ ATTR_WARN_UNUSED_RESULT
|
||||
ATTR_ALLOC_SIZE(1) ATTR_NONNULL(3);
|
||||
|
||||
/**
|
||||
* Same as callocN, clears memory and uses mmap (disk cached) if supported.
|
||||
* Can be free'd with MEM_freeN as usual.
|
||||
* */
|
||||
extern void *(*MEM_mapallocN)(size_t len,
|
||||
const char *str) /* ATTR_MALLOC */ ATTR_WARN_UNUSED_RESULT
|
||||
ATTR_ALLOC_SIZE(1) ATTR_NONNULL(2);
|
||||
|
||||
/** Print a list of the names and sizes of all allocated memory
|
||||
* blocks. as a python dict for easy investigation */
|
||||
extern void (*MEM_printmemlist_pydict)(void);
|
||||
|
@ -183,13 +175,8 @@ extern void (*MEM_set_lock_callback)(void (*lock)(void), void (*unlock)(void));
|
|||
/** Attempt to enforce OSX (or other OS's) to have malloc and stack nonzero */
|
||||
extern void (*MEM_set_memory_debug)(void);
|
||||
|
||||
/**
|
||||
* Memory usage stats
|
||||
* - MEM_get_memory_in_use is all memory
|
||||
* - MEM_get_mapped_memory_in_use is a subset of all memory */
|
||||
/** Memory usage stats. */
|
||||
extern size_t (*MEM_get_memory_in_use)(void);
|
||||
/** Get mapped memory usage. */
|
||||
extern size_t (*MEM_get_mapped_memory_in_use)(void);
|
||||
/** Get amount of memory blocks in use. */
|
||||
extern unsigned int (*MEM_get_memory_blocks_in_use)(void);
|
||||
|
||||
|
|
|
@ -48,7 +48,6 @@ void *(*MEM_malloc_arrayN)(size_t len, size_t size, const char *str) = MEM_lockf
|
|||
void *(*MEM_mallocN_aligned)(size_t len,
|
||||
size_t alignment,
|
||||
const char *str) = MEM_lockfree_mallocN_aligned;
|
||||
void *(*MEM_mapallocN)(size_t len, const char *str) = MEM_lockfree_mapallocN;
|
||||
void (*MEM_printmemlist_pydict)(void) = MEM_lockfree_printmemlist_pydict;
|
||||
void (*MEM_printmemlist)(void) = MEM_lockfree_printmemlist;
|
||||
void (*MEM_callbackmemlist)(void (*func)(void *)) = MEM_lockfree_callbackmemlist;
|
||||
|
@ -59,7 +58,6 @@ void (*MEM_set_lock_callback)(void (*lock)(void),
|
|||
void (*unlock)(void)) = MEM_lockfree_set_lock_callback;
|
||||
void (*MEM_set_memory_debug)(void) = MEM_lockfree_set_memory_debug;
|
||||
size_t (*MEM_get_memory_in_use)(void) = MEM_lockfree_get_memory_in_use;
|
||||
size_t (*MEM_get_mapped_memory_in_use)(void) = MEM_lockfree_get_mapped_memory_in_use;
|
||||
unsigned int (*MEM_get_memory_blocks_in_use)(void) = MEM_lockfree_get_memory_blocks_in_use;
|
||||
void (*MEM_reset_peak_memory)(void) = MEM_lockfree_reset_peak_memory;
|
||||
size_t (*MEM_get_peak_memory)(void) = MEM_lockfree_get_peak_memory;
|
||||
|
@ -111,7 +109,6 @@ void MEM_use_guarded_allocator(void)
|
|||
MEM_mallocN = MEM_guarded_mallocN;
|
||||
MEM_malloc_arrayN = MEM_guarded_malloc_arrayN;
|
||||
MEM_mallocN_aligned = MEM_guarded_mallocN_aligned;
|
||||
MEM_mapallocN = MEM_guarded_mapallocN;
|
||||
MEM_printmemlist_pydict = MEM_guarded_printmemlist_pydict;
|
||||
MEM_printmemlist = MEM_guarded_printmemlist;
|
||||
MEM_callbackmemlist = MEM_guarded_callbackmemlist;
|
||||
|
@ -121,7 +118,6 @@ void MEM_use_guarded_allocator(void)
|
|||
MEM_set_lock_callback = MEM_guarded_set_lock_callback;
|
||||
MEM_set_memory_debug = MEM_guarded_set_memory_debug;
|
||||
MEM_get_memory_in_use = MEM_guarded_get_memory_in_use;
|
||||
MEM_get_mapped_memory_in_use = MEM_guarded_get_mapped_memory_in_use;
|
||||
MEM_get_memory_blocks_in_use = MEM_guarded_get_memory_blocks_in_use;
|
||||
MEM_reset_peak_memory = MEM_guarded_reset_peak_memory;
|
||||
MEM_get_peak_memory = MEM_guarded_get_peak_memory;
|
||||
|
|
|
@ -104,7 +104,7 @@ typedef struct MemHead {
|
|||
const char *name;
|
||||
const char *nextname;
|
||||
int tag2;
|
||||
short mmap; /* if true, memory was mmapped */
|
||||
short pad1;
|
||||
short alignment; /* if non-zero aligned alloc was used
|
||||
* and alignment is stored here.
|
||||
*/
|
||||
|
@ -187,7 +187,7 @@ static const char *check_memlist(MemHead *memh);
|
|||
/* --------------------------------------------------------------------- */
|
||||
|
||||
static unsigned int totblock = 0;
|
||||
static size_t mem_in_use = 0, mmap_in_use = 0, peak_mem = 0;
|
||||
static size_t mem_in_use = 0, peak_mem = 0;
|
||||
|
||||
static volatile struct localListBase _membase;
|
||||
static volatile struct localListBase *membase = &_membase;
|
||||
|
@ -320,10 +320,8 @@ void *MEM_guarded_dupallocN(const void *vmemh)
|
|||
memh--;
|
||||
|
||||
#ifndef DEBUG_MEMDUPLINAME
|
||||
if (UNLIKELY(memh->mmap))
|
||||
newp = MEM_guarded_mapallocN(memh->len, "dupli_mapalloc");
|
||||
else if (LIKELY(memh->alignment == 0))
|
||||
newp = MEM_guarded_mapallocN(memh->len, "dupli_mapalloc");
|
||||
if (LIKELY(memh->alignment == 0))
|
||||
newp = MEM_guarded_mallocN(memh->len, "dupli_alloc");
|
||||
else
|
||||
newp = MEM_guarded_mallocN_aligned(memh->len, (size_t)memh->alignment, "dupli_alloc");
|
||||
|
||||
|
@ -334,11 +332,7 @@ void *MEM_guarded_dupallocN(const void *vmemh)
|
|||
MemHead *nmemh;
|
||||
char *name = malloc(strlen(memh->name) + 24);
|
||||
|
||||
if (UNLIKELY(memh->mmap)) {
|
||||
sprintf(name, "%s %s", "dupli_mapalloc", memh->name);
|
||||
newp = MEM_guarded_mapallocN(memh->len, name);
|
||||
}
|
||||
else if (LIKELY(memh->alignment == 0)) {
|
||||
if (LIKELY(memh->alignment == 0)) {
|
||||
sprintf(name, "%s %s", "dupli_alloc", memh->name);
|
||||
newp = MEM_guarded_mallocN(memh->len, name);
|
||||
}
|
||||
|
@ -478,7 +472,7 @@ static void make_memhead_header(MemHead *memh, size_t len, const char *str)
|
|||
memh->name = str;
|
||||
memh->nextname = NULL;
|
||||
memh->len = len;
|
||||
memh->mmap = 0;
|
||||
memh->pad1 = 0;
|
||||
memh->alignment = 0;
|
||||
memh->tag2 = MEMTAG2;
|
||||
|
||||
|
@ -646,58 +640,6 @@ void *MEM_guarded_calloc_arrayN(size_t len, size_t size, const char *str)
|
|||
return MEM_guarded_callocN(total_size, str);
|
||||
}
|
||||
|
||||
/* note; mmap returns zero'd memory */
|
||||
void *MEM_guarded_mapallocN(size_t len, const char *str)
|
||||
{
|
||||
MemHead *memh;
|
||||
|
||||
/* on 64 bit, simply use calloc instead, as mmap does not support
|
||||
* allocating > 4 GB on Windows. the only reason mapalloc exists
|
||||
* is to get around address space limitations in 32 bit OSes. */
|
||||
if (sizeof(void *) >= 8)
|
||||
return MEM_guarded_callocN(len, str);
|
||||
|
||||
len = SIZET_ALIGN_4(len);
|
||||
|
||||
#if defined(WIN32)
|
||||
/* our windows mmap implementation is not thread safe */
|
||||
mem_lock_thread();
|
||||
#endif
|
||||
memh = mmap(NULL,
|
||||
len + sizeof(MemHead) + sizeof(MemTail),
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_SHARED | MAP_ANON,
|
||||
-1,
|
||||
0);
|
||||
#if defined(WIN32)
|
||||
mem_unlock_thread();
|
||||
#endif
|
||||
|
||||
if (memh != (MemHead *)-1) {
|
||||
make_memhead_header(memh, len, str);
|
||||
memh->mmap = 1;
|
||||
atomic_add_and_fetch_z(&mmap_in_use, len);
|
||||
mem_lock_thread();
|
||||
peak_mem = mmap_in_use > peak_mem ? mmap_in_use : peak_mem;
|
||||
mem_unlock_thread();
|
||||
#ifdef DEBUG_MEMCOUNTER
|
||||
if (_mallocn_count == DEBUG_MEMCOUNTER_ERROR_VAL)
|
||||
memcount_raise(__func__);
|
||||
memh->_count = _mallocn_count++;
|
||||
#endif
|
||||
return (++memh);
|
||||
}
|
||||
else {
|
||||
print_error(
|
||||
"Mapalloc returns null, fallback to regular malloc: "
|
||||
"len=" SIZET_FORMAT " in %s, total %u\n",
|
||||
SIZET_ARG(len),
|
||||
str,
|
||||
(unsigned int)mmap_in_use);
|
||||
return MEM_guarded_callocN(len, str);
|
||||
}
|
||||
}
|
||||
|
||||
/* Memory statistics print */
|
||||
typedef struct MemPrintBlock {
|
||||
const char *name;
|
||||
|
@ -765,7 +707,7 @@ void MEM_guarded_printmemlist_stats(void)
|
|||
pb++;
|
||||
|
||||
#ifdef USE_MALLOC_USABLE_SIZE
|
||||
if (!membl->mmap && membl->alignment == 0) {
|
||||
if (membl->alignment == 0) {
|
||||
mem_in_use_slop += (sizeof(MemHead) + sizeof(MemTail) + malloc_usable_size((void *)membl)) -
|
||||
membl->len;
|
||||
}
|
||||
|
@ -1098,27 +1040,13 @@ static void rem_memblock(MemHead *memh)
|
|||
free((char *)memh->name);
|
||||
#endif
|
||||
|
||||
if (memh->mmap) {
|
||||
atomic_sub_and_fetch_z(&mmap_in_use, memh->len);
|
||||
#if defined(WIN32)
|
||||
/* our windows mmap implementation is not thread safe */
|
||||
mem_lock_thread();
|
||||
#endif
|
||||
if (munmap(memh, memh->len + sizeof(MemHead) + sizeof(MemTail)))
|
||||
printf("Couldn't unmap memory %s\n", memh->name);
|
||||
#if defined(WIN32)
|
||||
mem_unlock_thread();
|
||||
#endif
|
||||
if (UNLIKELY(malloc_debug_memset && memh->len))
|
||||
memset(memh + 1, 255, memh->len);
|
||||
if (LIKELY(memh->alignment == 0)) {
|
||||
free(memh);
|
||||
}
|
||||
else {
|
||||
if (UNLIKELY(malloc_debug_memset && memh->len))
|
||||
memset(memh + 1, 255, memh->len);
|
||||
if (LIKELY(memh->alignment == 0)) {
|
||||
free(memh);
|
||||
}
|
||||
else {
|
||||
aligned_free(MEMHEAD_REAL_PTR(memh));
|
||||
}
|
||||
aligned_free(MEMHEAD_REAL_PTR(memh));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1270,17 +1198,6 @@ size_t MEM_guarded_get_memory_in_use(void)
|
|||
return _mem_in_use;
|
||||
}
|
||||
|
||||
size_t MEM_guarded_get_mapped_memory_in_use(void)
|
||||
{
|
||||
size_t _mmap_in_use;
|
||||
|
||||
mem_lock_thread();
|
||||
_mmap_in_use = mmap_in_use;
|
||||
mem_unlock_thread();
|
||||
|
||||
return _mmap_in_use;
|
||||
}
|
||||
|
||||
unsigned int MEM_guarded_get_memory_blocks_in_use(void)
|
||||
{
|
||||
unsigned int _totblock;
|
||||
|
|
|
@ -24,13 +24,6 @@
|
|||
#ifndef __MALLOCN_INTERN_H__
|
||||
#define __MALLOCN_INTERN_H__
|
||||
|
||||
/* mmap exception */
|
||||
#if defined(WIN32)
|
||||
# include "mmap_win.h"
|
||||
#else
|
||||
# include <sys/mman.h>
|
||||
#endif
|
||||
|
||||
#ifdef __GNUC__
|
||||
# define UNUSED(x) UNUSED_##x __attribute__((__unused__))
|
||||
#else
|
||||
|
@ -140,9 +133,6 @@ void *MEM_lockfree_mallocN_aligned(size_t len,
|
|||
size_t alignment,
|
||||
const char *UNUSED(str)) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
|
||||
ATTR_ALLOC_SIZE(1) ATTR_NONNULL(3);
|
||||
void *MEM_lockfree_mapallocN(size_t len,
|
||||
const char *UNUSED(str)) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
|
||||
ATTR_ALLOC_SIZE(1) ATTR_NONNULL(2);
|
||||
void MEM_lockfree_printmemlist_pydict(void);
|
||||
void MEM_lockfree_printmemlist(void);
|
||||
void MEM_lockfree_callbackmemlist(void (*func)(void *));
|
||||
|
@ -152,7 +142,6 @@ bool MEM_lockfree_consistency_check(void);
|
|||
void MEM_lockfree_set_lock_callback(void (*lock)(void), void (*unlock)(void));
|
||||
void MEM_lockfree_set_memory_debug(void);
|
||||
size_t MEM_lockfree_get_memory_in_use(void);
|
||||
size_t MEM_lockfree_get_mapped_memory_in_use(void);
|
||||
unsigned int MEM_lockfree_get_memory_blocks_in_use(void);
|
||||
void MEM_lockfree_reset_peak_memory(void);
|
||||
size_t MEM_lockfree_get_peak_memory(void) ATTR_WARN_UNUSED_RESULT;
|
||||
|
@ -188,9 +177,6 @@ void *MEM_guarded_mallocN_aligned(size_t len,
|
|||
size_t alignment,
|
||||
const char *UNUSED(str)) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
|
||||
ATTR_ALLOC_SIZE(1) ATTR_NONNULL(3);
|
||||
void *MEM_guarded_mapallocN(size_t len,
|
||||
const char *UNUSED(str)) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
|
||||
ATTR_ALLOC_SIZE(1) ATTR_NONNULL(2);
|
||||
void MEM_guarded_printmemlist_pydict(void);
|
||||
void MEM_guarded_printmemlist(void);
|
||||
void MEM_guarded_callbackmemlist(void (*func)(void *));
|
||||
|
@ -200,7 +186,6 @@ bool MEM_guarded_consistency_check(void);
|
|||
void MEM_guarded_set_lock_callback(void (*lock)(void), void (*unlock)(void));
|
||||
void MEM_guarded_set_memory_debug(void);
|
||||
size_t MEM_guarded_get_memory_in_use(void);
|
||||
size_t MEM_guarded_get_mapped_memory_in_use(void);
|
||||
unsigned int MEM_guarded_get_memory_blocks_in_use(void);
|
||||
void MEM_guarded_reset_peak_memory(void);
|
||||
size_t MEM_guarded_get_peak_memory(void) ATTR_WARN_UNUSED_RESULT;
|
||||
|
|
|
@ -44,22 +44,18 @@ typedef struct MemHeadAligned {
|
|||
} MemHeadAligned;
|
||||
|
||||
static unsigned int totblock = 0;
|
||||
static size_t mem_in_use = 0, mmap_in_use = 0, peak_mem = 0;
|
||||
static size_t mem_in_use = 0, peak_mem = 0;
|
||||
static bool malloc_debug_memset = false;
|
||||
|
||||
static void (*error_callback)(const char *) = NULL;
|
||||
static void (*thread_lock_callback)(void) = NULL;
|
||||
static void (*thread_unlock_callback)(void) = NULL;
|
||||
|
||||
enum {
|
||||
MEMHEAD_MMAP_FLAG = 1,
|
||||
MEMHEAD_ALIGN_FLAG = 2,
|
||||
MEMHEAD_ALIGN_FLAG = 1,
|
||||
};
|
||||
|
||||
#define MEMHEAD_FROM_PTR(ptr) (((MemHead *)ptr) - 1)
|
||||
#define PTR_FROM_MEMHEAD(memhead) (memhead + 1)
|
||||
#define MEMHEAD_ALIGNED_FROM_PTR(ptr) (((MemHeadAligned *)ptr) - 1)
|
||||
#define MEMHEAD_IS_MMAP(memhead) ((memhead)->len & (size_t)MEMHEAD_MMAP_FLAG)
|
||||
#define MEMHEAD_IS_ALIGNED(memhead) ((memhead)->len & (size_t)MEMHEAD_ALIGN_FLAG)
|
||||
|
||||
/* Uncomment this to have proper peak counter. */
|
||||
|
@ -93,24 +89,10 @@ print_error(const char *str, ...)
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(WIN32)
|
||||
static void mem_lock_thread(void)
|
||||
{
|
||||
if (thread_lock_callback)
|
||||
thread_lock_callback();
|
||||
}
|
||||
|
||||
static void mem_unlock_thread(void)
|
||||
{
|
||||
if (thread_unlock_callback)
|
||||
thread_unlock_callback();
|
||||
}
|
||||
#endif
|
||||
|
||||
size_t MEM_lockfree_allocN_len(const void *vmemh)
|
||||
{
|
||||
if (vmemh) {
|
||||
return MEMHEAD_FROM_PTR(vmemh)->len & ~((size_t)(MEMHEAD_MMAP_FLAG | MEMHEAD_ALIGN_FLAG));
|
||||
return MEMHEAD_FROM_PTR(vmemh)->len & ~((size_t)(MEMHEAD_ALIGN_FLAG));
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
|
@ -133,29 +115,15 @@ void MEM_lockfree_freeN(void *vmemh)
|
|||
atomic_sub_and_fetch_u(&totblock, 1);
|
||||
atomic_sub_and_fetch_z(&mem_in_use, len);
|
||||
|
||||
if (MEMHEAD_IS_MMAP(memh)) {
|
||||
atomic_sub_and_fetch_z(&mmap_in_use, len);
|
||||
#if defined(WIN32)
|
||||
/* our windows mmap implementation is not thread safe */
|
||||
mem_lock_thread();
|
||||
#endif
|
||||
if (munmap(memh, len + sizeof(MemHead)))
|
||||
printf("Couldn't unmap memory\n");
|
||||
#if defined(WIN32)
|
||||
mem_unlock_thread();
|
||||
#endif
|
||||
if (UNLIKELY(malloc_debug_memset && len)) {
|
||||
memset(memh + 1, 255, len);
|
||||
}
|
||||
if (UNLIKELY(MEMHEAD_IS_ALIGNED(memh))) {
|
||||
MemHeadAligned *memh_aligned = MEMHEAD_ALIGNED_FROM_PTR(vmemh);
|
||||
aligned_free(MEMHEAD_REAL_PTR(memh_aligned));
|
||||
}
|
||||
else {
|
||||
if (UNLIKELY(malloc_debug_memset && len)) {
|
||||
memset(memh + 1, 255, len);
|
||||
}
|
||||
if (UNLIKELY(MEMHEAD_IS_ALIGNED(memh))) {
|
||||
MemHeadAligned *memh_aligned = MEMHEAD_ALIGNED_FROM_PTR(vmemh);
|
||||
aligned_free(MEMHEAD_REAL_PTR(memh_aligned));
|
||||
}
|
||||
else {
|
||||
free(memh);
|
||||
}
|
||||
free(memh);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -165,10 +133,7 @@ void *MEM_lockfree_dupallocN(const void *vmemh)
|
|||
if (vmemh) {
|
||||
MemHead *memh = MEMHEAD_FROM_PTR(vmemh);
|
||||
const size_t prev_size = MEM_lockfree_allocN_len(vmemh);
|
||||
if (UNLIKELY(MEMHEAD_IS_MMAP(memh))) {
|
||||
newp = MEM_lockfree_mapallocN(prev_size, "dupli_mapalloc");
|
||||
}
|
||||
else if (UNLIKELY(MEMHEAD_IS_ALIGNED(memh))) {
|
||||
if (UNLIKELY(MEMHEAD_IS_ALIGNED(memh))) {
|
||||
MemHeadAligned *memh_aligned = MEMHEAD_ALIGNED_FROM_PTR(vmemh);
|
||||
newp = MEM_lockfree_mallocN_aligned(
|
||||
prev_size, (size_t)memh_aligned->alignment, "dupli_malloc");
|
||||
|
@ -397,47 +362,6 @@ void *MEM_lockfree_mallocN_aligned(size_t len, size_t alignment, const char *str
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void *MEM_lockfree_mapallocN(size_t len, const char *str)
|
||||
{
|
||||
MemHead *memh;
|
||||
|
||||
/* on 64 bit, simply use calloc instead, as mmap does not support
|
||||
* allocating > 4 GB on Windows. the only reason mapalloc exists
|
||||
* is to get around address space limitations in 32 bit OSes. */
|
||||
if (sizeof(void *) >= 8)
|
||||
return MEM_lockfree_callocN(len, str);
|
||||
|
||||
len = SIZET_ALIGN_4(len);
|
||||
|
||||
#if defined(WIN32)
|
||||
/* our windows mmap implementation is not thread safe */
|
||||
mem_lock_thread();
|
||||
#endif
|
||||
memh = mmap(NULL, len + sizeof(MemHead), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
|
||||
#if defined(WIN32)
|
||||
mem_unlock_thread();
|
||||
#endif
|
||||
|
||||
if (memh != (MemHead *)-1) {
|
||||
memh->len = len | (size_t)MEMHEAD_MMAP_FLAG;
|
||||
atomic_add_and_fetch_u(&totblock, 1);
|
||||
atomic_add_and_fetch_z(&mem_in_use, len);
|
||||
atomic_add_and_fetch_z(&mmap_in_use, len);
|
||||
|
||||
update_maximum(&peak_mem, mem_in_use);
|
||||
update_maximum(&peak_mem, mmap_in_use);
|
||||
|
||||
return PTR_FROM_MEMHEAD(memh);
|
||||
}
|
||||
print_error(
|
||||
"Mapalloc returns null, fallback to regular malloc: "
|
||||
"len=" SIZET_FORMAT " in %s, total %u\n",
|
||||
SIZET_ARG(len),
|
||||
str,
|
||||
(unsigned int)mmap_in_use);
|
||||
return MEM_lockfree_callocN(len, str);
|
||||
}
|
||||
|
||||
void MEM_lockfree_printmemlist_pydict(void)
|
||||
{
|
||||
}
|
||||
|
@ -478,8 +402,8 @@ bool MEM_lockfree_consistency_check(void)
|
|||
|
||||
void MEM_lockfree_set_lock_callback(void (*lock)(void), void (*unlock)(void))
|
||||
{
|
||||
thread_lock_callback = lock;
|
||||
thread_unlock_callback = unlock;
|
||||
(void)lock;
|
||||
(void)unlock;
|
||||
}
|
||||
|
||||
void MEM_lockfree_set_memory_debug(void)
|
||||
|
@ -492,11 +416,6 @@ size_t MEM_lockfree_get_memory_in_use(void)
|
|||
return mem_in_use;
|
||||
}
|
||||
|
||||
size_t MEM_lockfree_get_mapped_memory_in_use(void)
|
||||
{
|
||||
return mmap_in_use;
|
||||
}
|
||||
|
||||
unsigned int MEM_lockfree_get_memory_blocks_in_use(void)
|
||||
{
|
||||
return totblock;
|
||||
|
|
|
@ -713,7 +713,7 @@ static ImBuf *make_grayscale_ibuf_copy(ImBuf *ibuf)
|
|||
*/
|
||||
const size_t size = (size_t)grayscale->x * (size_t)grayscale->y * sizeof(float);
|
||||
grayscale->channels = 1;
|
||||
if ((grayscale->rect_float = MEM_mapallocN(size, "tracking grayscale image")) != NULL) {
|
||||
if ((grayscale->rect_float = MEM_callocN(size, "tracking grayscale image")) != NULL) {
|
||||
grayscale->mall |= IB_rectfloat;
|
||||
grayscale->flags |= IB_rectfloat;
|
||||
|
||||
|
@ -741,7 +741,7 @@ static ImBuf *float_image_to_ibuf(libmv_FloatImage *float_image)
|
|||
ImBuf *ibuf = IMB_allocImBuf(float_image->width, float_image->height, 32, 0);
|
||||
size_t size = (size_t)ibuf->x * (size_t)ibuf->y * float_image->channels * sizeof(float);
|
||||
ibuf->channels = float_image->channels;
|
||||
if ((ibuf->rect_float = MEM_mapallocN(size, "tracking grayscale image")) != NULL) {
|
||||
if ((ibuf->rect_float = MEM_callocN(size, "tracking grayscale image")) != NULL) {
|
||||
ibuf->mall |= IB_rectfloat;
|
||||
ibuf->flags |= IB_rectfloat;
|
||||
|
||||
|
|
|
@ -570,15 +570,15 @@ void zbuf_accumulate_vecblur(NodeBlurData *nbd,
|
|||
zspan.zofsy = 0.0f;
|
||||
|
||||
/* the buffers */
|
||||
rectz = (float *)MEM_mapallocN(sizeof(float) * xsize * ysize, "zbuf accum");
|
||||
rectz = (float *)MEM_callocN(sizeof(float) * xsize * ysize, "zbuf accum");
|
||||
zspan.rectz = (int *)rectz;
|
||||
|
||||
rectmove = (char *)MEM_mapallocN(xsize * ysize, "rectmove");
|
||||
rectdraw = (DrawBufPixel *)MEM_mapallocN(sizeof(DrawBufPixel) * xsize * ysize, "rect draw");
|
||||
rectmove = (char *)MEM_callocN(xsize * ysize, "rectmove");
|
||||
rectdraw = (DrawBufPixel *)MEM_callocN(sizeof(DrawBufPixel) * xsize * ysize, "rect draw");
|
||||
zspan.rectdraw = rectdraw;
|
||||
|
||||
rectweight = (float *)MEM_mapallocN(sizeof(float) * xsize * ysize, "rect weight");
|
||||
rectmax = (float *)MEM_mapallocN(sizeof(float) * xsize * ysize, "rect max");
|
||||
rectweight = (float *)MEM_callocN(sizeof(float) * xsize * ysize, "rect weight");
|
||||
rectmax = (float *)MEM_callocN(sizeof(float) * xsize * ysize, "rect max");
|
||||
|
||||
/* debug... check if PASS_VECTOR_MAX still is in buffers */
|
||||
dvec1 = vecbufrect;
|
||||
|
@ -597,7 +597,7 @@ void zbuf_accumulate_vecblur(NodeBlurData *nbd,
|
|||
float minspeed = (float)nbd->minspeed;
|
||||
float minspeedsq = minspeed * minspeed;
|
||||
|
||||
minvecbufrect = (float *)MEM_mapallocN(4 * sizeof(float) * xsize * ysize, "minspeed buf");
|
||||
minvecbufrect = (float *)MEM_callocN(4 * sizeof(float) * xsize * ysize, "minspeed buf");
|
||||
|
||||
dvec1 = vecbufrect;
|
||||
dvec2 = minvecbufrect;
|
||||
|
@ -623,7 +623,7 @@ void zbuf_accumulate_vecblur(NodeBlurData *nbd,
|
|||
}
|
||||
|
||||
/* make vertex buffer with averaged speed and zvalues */
|
||||
rectvz = (float *)MEM_mapallocN(4 * sizeof(float) * (xsize + 1) * (ysize + 1), "vertices");
|
||||
rectvz = (float *)MEM_callocN(4 * sizeof(float) * (xsize + 1) * (ysize + 1), "vertices");
|
||||
dvz = rectvz;
|
||||
for (y = 0; y <= ysize; y++) {
|
||||
|
||||
|
|
|
@ -391,16 +391,14 @@ static void make_renderinfo_string(const RenderStats *rs,
|
|||
char *str)
|
||||
{
|
||||
char info_time_str[32]; // used to be extern to header_info.c
|
||||
uintptr_t mem_in_use, mmap_in_use, peak_memory;
|
||||
float megs_used_memory, mmap_used_memory, megs_peak_memory;
|
||||
uintptr_t mem_in_use, peak_memory;
|
||||
float megs_used_memory, megs_peak_memory;
|
||||
char *spos = str;
|
||||
|
||||
mem_in_use = MEM_get_memory_in_use();
|
||||
mmap_in_use = MEM_get_mapped_memory_in_use();
|
||||
peak_memory = MEM_get_peak_memory();
|
||||
|
||||
megs_used_memory = (mem_in_use - mmap_in_use) / (1024.0 * 1024.0);
|
||||
mmap_used_memory = (mmap_in_use) / (1024.0 * 1024.0);
|
||||
megs_used_memory = (mem_in_use) / (1024.0 * 1024.0);
|
||||
megs_peak_memory = (peak_memory) / (1024.0 * 1024.0);
|
||||
|
||||
/* local view */
|
||||
|
@ -462,11 +460,7 @@ static void make_renderinfo_string(const RenderStats *rs,
|
|||
}
|
||||
|
||||
if (rs->mem_peak == 0.0f) {
|
||||
spos += sprintf(spos,
|
||||
TIP_("| Mem:%.2fM (%.2fM, Peak %.2fM) "),
|
||||
megs_used_memory,
|
||||
mmap_used_memory,
|
||||
megs_peak_memory);
|
||||
spos += sprintf(spos, TIP_("| Mem:%.2fM (Peak %.2fM) "), megs_used_memory, megs_peak_memory);
|
||||
}
|
||||
else {
|
||||
spos += sprintf(spos, TIP_("| Mem:%.2fM, Peak: %.2fM "), rs->mem_used, rs->mem_peak);
|
||||
|
|
|
@ -914,7 +914,7 @@ static void sculpt_undo_alloc_and_store_hidden(PBVH *pbvh, SculptUndoNode *unode
|
|||
|
||||
BKE_pbvh_node_get_grids(pbvh, node, &grid_indices, &totgrid, NULL, NULL, NULL);
|
||||
|
||||
unode->grid_hidden = MEM_mapallocN(sizeof(*unode->grid_hidden) * totgrid, "unode->grid_hidden");
|
||||
unode->grid_hidden = MEM_callocN(sizeof(*unode->grid_hidden) * totgrid, "unode->grid_hidden");
|
||||
|
||||
for (i = 0; i < totgrid; i++) {
|
||||
if (grid_hidden[grid_indices[i]]) {
|
||||
|
@ -975,13 +975,11 @@ static SculptUndoNode *sculpt_undo_alloc_node(Object *ob, PBVHNode *node, Sculpt
|
|||
maxgrid = 0;
|
||||
}
|
||||
|
||||
/* We will use this while sculpting, is mapalloc slow to access then? */
|
||||
|
||||
/* General TODO, fix count_alloc. */
|
||||
switch (type) {
|
||||
case SCULPT_UNDO_COORDS:
|
||||
unode->co = MEM_mapallocN(sizeof(float[3]) * allvert, "SculptUndoNode.co");
|
||||
unode->no = MEM_mapallocN(sizeof(short[3]) * allvert, "SculptUndoNode.no");
|
||||
unode->co = MEM_callocN(sizeof(float[3]) * allvert, "SculptUndoNode.co");
|
||||
unode->no = MEM_callocN(sizeof(short[3]) * allvert, "SculptUndoNode.no");
|
||||
|
||||
usculpt->undo_size = (sizeof(float[3]) + sizeof(short[3]) + sizeof(int)) * allvert;
|
||||
break;
|
||||
|
@ -995,7 +993,7 @@ static SculptUndoNode *sculpt_undo_alloc_node(Object *ob, PBVHNode *node, Sculpt
|
|||
|
||||
break;
|
||||
case SCULPT_UNDO_MASK:
|
||||
unode->mask = MEM_mapallocN(sizeof(float) * allvert, "SculptUndoNode.mask");
|
||||
unode->mask = MEM_callocN(sizeof(float) * allvert, "SculptUndoNode.mask");
|
||||
|
||||
usculpt->undo_size += (sizeof(float) * sizeof(int)) * allvert;
|
||||
|
||||
|
@ -1014,12 +1012,12 @@ static SculptUndoNode *sculpt_undo_alloc_node(Object *ob, PBVHNode *node, Sculpt
|
|||
unode->maxgrid = maxgrid;
|
||||
unode->totgrid = totgrid;
|
||||
unode->gridsize = gridsize;
|
||||
unode->grids = MEM_mapallocN(sizeof(int) * totgrid, "SculptUndoNode.grids");
|
||||
unode->grids = MEM_callocN(sizeof(int) * totgrid, "SculptUndoNode.grids");
|
||||
}
|
||||
else {
|
||||
/* Regular mesh. */
|
||||
unode->maxvert = ss->totvert;
|
||||
unode->index = MEM_mapallocN(sizeof(int) * allvert, "SculptUndoNode.index");
|
||||
unode->index = MEM_callocN(sizeof(int) * allvert, "SculptUndoNode.index");
|
||||
}
|
||||
|
||||
if (ss->deform_modifiers_active) {
|
||||
|
|
|
@ -225,9 +225,9 @@ void *ED_image_paint_tile_push(ListBase *paint_tiles,
|
|||
"PaintTile.mask");
|
||||
}
|
||||
|
||||
ptile->rect.pt = MEM_mapallocN((ibuf->rect_float ? sizeof(float[4]) : sizeof(char[4])) *
|
||||
square_i(ED_IMAGE_UNDO_TILE_SIZE),
|
||||
"PaintTile.rect");
|
||||
ptile->rect.pt = MEM_callocN((ibuf->rect_float ? sizeof(float[4]) : sizeof(char[4])) *
|
||||
square_i(ED_IMAGE_UNDO_TILE_SIZE),
|
||||
"PaintTile.rect");
|
||||
|
||||
ptile->use_float = has_float;
|
||||
ptile->valid = true;
|
||||
|
|
|
@ -414,17 +414,11 @@ static const char *footer_string(ViewLayer *view_layer)
|
|||
size_t ofs = 0;
|
||||
|
||||
uintptr_t mem_in_use = MEM_get_memory_in_use();
|
||||
uintptr_t mmap_in_use = MEM_get_mapped_memory_in_use();
|
||||
|
||||
/* get memory statistics */
|
||||
BLI_str_format_byte_unit(formatted_mem, mem_in_use - mmap_in_use, false);
|
||||
BLI_str_format_byte_unit(formatted_mem, mem_in_use, false);
|
||||
ofs = BLI_snprintf(memstr, MAX_INFO_MEM_LEN, TIP_("Mem: %s"), formatted_mem);
|
||||
|
||||
if (mmap_in_use) {
|
||||
BLI_str_format_byte_unit(formatted_mem, mmap_in_use, false);
|
||||
BLI_snprintf(memstr + ofs, MAX_INFO_MEM_LEN - ofs, TIP_(" (%s)"), formatted_mem);
|
||||
}
|
||||
|
||||
if (GPU_mem_stats_supported()) {
|
||||
int gpu_free_mem, gpu_tot_memory;
|
||||
|
||||
|
|
|
@ -923,19 +923,16 @@ Render *Controller::RenderStrokes(Render *re, bool render)
|
|||
cout << "Stroke rendering : " << d << endl;
|
||||
|
||||
uintptr_t mem_in_use = MEM_get_memory_in_use();
|
||||
uintptr_t mmap_in_use = MEM_get_mapped_memory_in_use();
|
||||
uintptr_t peak_memory = MEM_get_peak_memory();
|
||||
|
||||
float megs_used_memory = (mem_in_use - mmap_in_use) / (1024.0 * 1024.0);
|
||||
float mmap_used_memory = (mmap_in_use) / (1024.0 * 1024.0);
|
||||
float megs_used_memory = (mem_in_use) / (1024.0 * 1024.0);
|
||||
float megs_peak_memory = (peak_memory) / (1024.0 * 1024.0);
|
||||
|
||||
printf("%d objs, %d verts, %d faces, mem %.2fM (%.2fM, peak %.2fM)\n",
|
||||
printf("%d objs, %d verts, %d faces, mem %.2fM (peak %.2fM)\n",
|
||||
totmesh,
|
||||
freestyle_render->i.totvert,
|
||||
freestyle_render->i.totface,
|
||||
megs_used_memory,
|
||||
mmap_used_memory,
|
||||
megs_peak_memory);
|
||||
}
|
||||
delete blenderRenderer;
|
||||
|
|
|
@ -380,7 +380,7 @@ void *imb_alloc_pixels(
|
|||
}
|
||||
|
||||
size_t size = (size_t)x * (size_t)y * (size_t)channels * typesize;
|
||||
return MEM_mapallocN(size, name);
|
||||
return MEM_callocN(size, name);
|
||||
}
|
||||
|
||||
bool imb_addrectfloatImBuf(ImBuf *ibuf)
|
||||
|
|
|
@ -427,8 +427,8 @@ void IMB_tiles_to_rect(ImBuf *ibuf)
|
|||
|
||||
/* don't call imb_addrectImBuf, it frees all mipmaps */
|
||||
if (!mipbuf->rect) {
|
||||
if ((mipbuf->rect = MEM_mapallocN(ibuf->x * ibuf->y * sizeof(unsigned int),
|
||||
"imb_addrectImBuf"))) {
|
||||
if ((mipbuf->rect = MEM_callocN(ibuf->x * ibuf->y * sizeof(unsigned int),
|
||||
"imb_addrectImBuf"))) {
|
||||
mipbuf->mall |= IB_rect;
|
||||
mipbuf->flags |= IB_rect;
|
||||
}
|
||||
|
|
|
@ -788,7 +788,7 @@ void IMB_float_from_rect(ImBuf *ibuf)
|
|||
size = size * 4 * sizeof(float);
|
||||
ibuf->channels = 4;
|
||||
|
||||
rect_float = MEM_mapallocN(size, "IMB_float_from_rect");
|
||||
rect_float = MEM_callocN(size, "IMB_float_from_rect");
|
||||
|
||||
if (rect_float == NULL) {
|
||||
return;
|
||||
|
|
|
@ -1598,8 +1598,8 @@ static ExrHandle *imb_exr_begin_read_mem(IStream &file_stream,
|
|||
for (lay = (ExrLayer *)data->layers.first; lay; lay = lay->next) {
|
||||
for (pass = (ExrPass *)lay->passes.first; pass; pass = pass->next) {
|
||||
if (pass->totchan) {
|
||||
pass->rect = (float *)MEM_mapallocN(width * height * pass->totchan * sizeof(float),
|
||||
"pass rect");
|
||||
pass->rect = (float *)MEM_callocN(width * height * pass->totchan * sizeof(float),
|
||||
"pass rect");
|
||||
if (pass->totchan == 1) {
|
||||
echan = pass->chan[0];
|
||||
echan->rect = pass->rect;
|
||||
|
|
|
@ -187,23 +187,20 @@ static int default_break(void *UNUSED(arg))
|
|||
|
||||
static void stats_background(void *UNUSED(arg), RenderStats *rs)
|
||||
{
|
||||
uintptr_t mem_in_use, mmap_in_use, peak_memory;
|
||||
float megs_used_memory, mmap_used_memory, megs_peak_memory;
|
||||
uintptr_t mem_in_use, peak_memory;
|
||||
float megs_used_memory, megs_peak_memory;
|
||||
char info_time_str[32];
|
||||
|
||||
mem_in_use = MEM_get_memory_in_use();
|
||||
mmap_in_use = MEM_get_mapped_memory_in_use();
|
||||
peak_memory = MEM_get_peak_memory();
|
||||
|
||||
megs_used_memory = (mem_in_use - mmap_in_use) / (1024.0 * 1024.0);
|
||||
mmap_used_memory = (mmap_in_use) / (1024.0 * 1024.0);
|
||||
megs_used_memory = (mem_in_use) / (1024.0 * 1024.0);
|
||||
megs_peak_memory = (peak_memory) / (1024.0 * 1024.0);
|
||||
|
||||
fprintf(stdout,
|
||||
TIP_("Fra:%d Mem:%.2fM (%.2fM, Peak %.2fM) "),
|
||||
TIP_("Fra:%d Mem:%.2fM (Peak %.2fM) "),
|
||||
rs->cfra,
|
||||
megs_used_memory,
|
||||
mmap_used_memory,
|
||||
megs_peak_memory);
|
||||
|
||||
if (rs->curfield) {
|
||||
|
|
|
@ -255,7 +255,7 @@ RenderPass *render_layer_add_pass(RenderResult *rr,
|
|||
float *rect;
|
||||
int x;
|
||||
|
||||
rpass->rect = MEM_mapallocN(sizeof(float) * rectsize, name);
|
||||
rpass->rect = MEM_callocN(sizeof(float) * rectsize, name);
|
||||
if (rpass->rect == NULL) {
|
||||
MEM_freeN(rpass);
|
||||
return NULL;
|
||||
|
|
Loading…
Reference in New Issue