|
@@ -894,13 +894,13 @@ mg_atomic_add(volatile int *addr, int value)
|
|
// static unsigned long mg_memory_debug_blockCount = 0;
|
|
// static unsigned long mg_memory_debug_blockCount = 0;
|
|
// static unsigned long mg_memory_debug_totalMemUsed = 0;
|
|
// static unsigned long mg_memory_debug_totalMemUsed = 0;
|
|
|
|
|
|
-struct memory_debug {
|
|
|
|
|
|
+struct mg_memory_stat {
|
|
volatile int blockCount;
|
|
volatile int blockCount;
|
|
volatile int totalMemUsed;
|
|
volatile int totalMemUsed;
|
|
volatile int maxMemUsed;
|
|
volatile int maxMemUsed;
|
|
};
|
|
};
|
|
|
|
|
|
-static struct memory_debug mg_memory_debug = {0, 0, 0};
|
|
|
|
|
|
+static struct mg_memory_stat mg_common_memory = {0, 0, 0};
|
|
|
|
|
|
static void *
|
|
static void *
|
|
mg_malloc_ex(size_t size,
|
|
mg_malloc_ex(size_t size,
|
|
@@ -910,23 +910,27 @@ mg_malloc_ex(size_t size,
|
|
{
|
|
{
|
|
void *data = malloc(size + sizeof(size_t));
|
|
void *data = malloc(size + sizeof(size_t));
|
|
void *memory = 0;
|
|
void *memory = 0;
|
|
|
|
+ struct mg_memory_stat *mstat = &mg_common_memory;
|
|
|
|
|
|
#if defined(MEMORY_DEBUGGING)
|
|
#if defined(MEMORY_DEBUGGING)
|
|
char mallocStr[256];
|
|
char mallocStr[256];
|
|
|
|
+#else
|
|
|
|
+ (void)file;
|
|
|
|
+ (void)line;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
(void)ctx;
|
|
(void)ctx;
|
|
|
|
|
|
if (data) {
|
|
if (data) {
|
|
- int mmem = mg_atomic_add(&mg_memory_debug.totalMemUsed, size);
|
|
|
|
- if (mmem > mg_memory_debug.maxMemUsed) {
|
|
|
|
|
|
+ int mmem = mg_atomic_add(&mstat->totalMemUsed, size);
|
|
|
|
+ if (mmem > mstat->maxMemUsed) {
|
|
/* could use atomic compare exchange, but this
|
|
/* could use atomic compare exchange, but this
|
|
* seems overkill for statistics data */
|
|
* seems overkill for statistics data */
|
|
- mg_memory_debug.maxMemUsed = mmem;
|
|
|
|
|
|
+ mstat->maxMemUsed = mmem;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- mg_atomic_inc(&mg_memory_debug.blockCount);
|
|
|
|
|
|
+ mg_atomic_inc(&mstat->blockCount);
|
|
*(size_t *)data = size;
|
|
*(size_t *)data = size;
|
|
memory = (void *)(((char *)data) + sizeof(size_t));
|
|
memory = (void *)(((char *)data) + sizeof(size_t));
|
|
}
|
|
}
|
|
@@ -936,8 +940,8 @@ mg_malloc_ex(size_t size,
|
|
"MEM: %p %5lu alloc %7lu %4lu --- %s:%u\n",
|
|
"MEM: %p %5lu alloc %7lu %4lu --- %s:%u\n",
|
|
memory,
|
|
memory,
|
|
(unsigned long)size,
|
|
(unsigned long)size,
|
|
- mg_memory_debug.totalMemUsed,
|
|
|
|
- mg_memory_debug.blockCount,
|
|
|
|
|
|
+ mstat->totalMemUsed,
|
|
|
|
+ mstat->blockCount,
|
|
file,
|
|
file,
|
|
line);
|
|
line);
|
|
#if defined(_WIN32)
|
|
#if defined(_WIN32)
|
|
@@ -973,25 +977,30 @@ mg_free_ex(void *memory,
|
|
const char *file,
|
|
const char *file,
|
|
unsigned line)
|
|
unsigned line)
|
|
{
|
|
{
|
|
|
|
+ void *data = (void *)(((char *)memory) - sizeof(size_t));
|
|
|
|
+ size_t size;
|
|
|
|
+ struct mg_memory_stat *mstat = &mg_common_memory;
|
|
|
|
+
|
|
#if defined(MEMORY_DEBUGGING)
|
|
#if defined(MEMORY_DEBUGGING)
|
|
char mallocStr[256];
|
|
char mallocStr[256];
|
|
|
|
+#else
|
|
|
|
+ (void)file;
|
|
|
|
+ (void)line;
|
|
#endif
|
|
#endif
|
|
- void *data = (void *)(((char *)memory) - sizeof(size_t));
|
|
|
|
- size_t size;
|
|
|
|
|
|
|
|
(void)ctx;
|
|
(void)ctx;
|
|
|
|
|
|
if (memory) {
|
|
if (memory) {
|
|
size = *(size_t *)data;
|
|
size = *(size_t *)data;
|
|
- mg_atomic_add(&mg_memory_debug.totalMemUsed, -size);
|
|
|
|
- mg_atomic_dec(&mg_memory_debug.blockCount);
|
|
|
|
|
|
+ mg_atomic_add(&mstat->totalMemUsed, -size);
|
|
|
|
+ mg_atomic_dec(&mstat->blockCount);
|
|
#if defined(MEMORY_DEBUGGING)
|
|
#if defined(MEMORY_DEBUGGING)
|
|
sprintf(mallocStr,
|
|
sprintf(mallocStr,
|
|
"MEM: %p %5lu free %7lu %4lu --- %s:%u\n",
|
|
"MEM: %p %5lu free %7lu %4lu --- %s:%u\n",
|
|
memory,
|
|
memory,
|
|
(unsigned long)size,
|
|
(unsigned long)size,
|
|
- mg_memory_debug.totalMemUsed,
|
|
|
|
- mg_memory_debug.blockCount,
|
|
|
|
|
|
+ mstat->totalMemUsed,
|
|
|
|
+ mstat->blockCount,
|
|
file,
|
|
file,
|
|
line);
|
|
line);
|
|
#if defined(_WIN32)
|
|
#if defined(_WIN32)
|
|
@@ -1012,12 +1021,19 @@ mg_realloc_ex(void *memory,
|
|
const char *file,
|
|
const char *file,
|
|
unsigned line)
|
|
unsigned line)
|
|
{
|
|
{
|
|
-#if defined(MEMORY_DEBUGGING)
|
|
|
|
- char mallocStr[256];
|
|
|
|
-#endif
|
|
|
|
void *data;
|
|
void *data;
|
|
void *_realloc;
|
|
void *_realloc;
|
|
size_t oldsize;
|
|
size_t oldsize;
|
|
|
|
+ struct mg_memory_stat *mstat = &mg_common_memory;
|
|
|
|
+
|
|
|
|
+#if defined(MEMORY_DEBUGGING)
|
|
|
|
+ char mallocStr[256];
|
|
|
|
+#else
|
|
|
|
+ (void)file;
|
|
|
|
+ (void)line;
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+ (void)ctx;
|
|
|
|
|
|
if (newsize) {
|
|
if (newsize) {
|
|
if (memory) {
|
|
if (memory) {
|
|
@@ -1026,14 +1042,14 @@ mg_realloc_ex(void *memory,
|
|
_realloc = realloc(data, newsize + sizeof(size_t));
|
|
_realloc = realloc(data, newsize + sizeof(size_t));
|
|
if (_realloc) {
|
|
if (_realloc) {
|
|
data = _realloc;
|
|
data = _realloc;
|
|
- mg_memory_debug.totalMemUsed -= oldsize;
|
|
|
|
|
|
+ mstat->totalMemUsed -= oldsize;
|
|
#if defined(MEMORY_DEBUGGING)
|
|
#if defined(MEMORY_DEBUGGING)
|
|
sprintf(mallocStr,
|
|
sprintf(mallocStr,
|
|
"MEM: %p %5lu r-free %7lu %4lu --- %s:%u\n",
|
|
"MEM: %p %5lu r-free %7lu %4lu --- %s:%u\n",
|
|
memory,
|
|
memory,
|
|
(unsigned long)oldsize,
|
|
(unsigned long)oldsize,
|
|
- mg_memory_debug.totalMemUsed,
|
|
|
|
- mg_memory_debug.blockCount,
|
|
|
|
|
|
+ mstat->totalMemUsed,
|
|
|
|
+ mstat->blockCount,
|
|
file,
|
|
file,
|
|
line);
|
|
line);
|
|
#if defined(_WIN32)
|
|
#if defined(_WIN32)
|
|
@@ -1042,14 +1058,14 @@ mg_realloc_ex(void *memory,
|
|
DEBUG_TRACE("%s", mallocStr);
|
|
DEBUG_TRACE("%s", mallocStr);
|
|
#endif
|
|
#endif
|
|
#endif
|
|
#endif
|
|
- mg_memory_debug.totalMemUsed += newsize;
|
|
|
|
|
|
+ mstat->totalMemUsed += newsize;
|
|
#if defined(MEMORY_DEBUGGING)
|
|
#if defined(MEMORY_DEBUGGING)
|
|
sprintf(mallocStr,
|
|
sprintf(mallocStr,
|
|
"MEM: %p %5lu r-alloc %7lu %4lu --- %s:%u\n",
|
|
"MEM: %p %5lu r-alloc %7lu %4lu --- %s:%u\n",
|
|
memory,
|
|
memory,
|
|
(unsigned long)newsize,
|
|
(unsigned long)newsize,
|
|
- mg_memory_debug.totalMemUsed,
|
|
|
|
- mg_memory_debug.blockCount,
|
|
|
|
|
|
+ mstat->totalMemUsed,
|
|
|
|
+ mstat->blockCount,
|
|
file,
|
|
file,
|
|
line);
|
|
line);
|
|
#if defined(_WIN32)
|
|
#if defined(_WIN32)
|