Browse Source

use memSegment of when tree based optimizations where not used. That way all other features implemented here are still available

release0.1.6
Georg Hopp 12 years ago
parent
commit
00ce60fa03
  1. 27
      src/utils/memory.c

27
src/utils/memory.c

@ -782,8 +782,7 @@ memNewRef(void * mem)
void * void *
memMalloc(size_t size) memMalloc(size_t size)
{ {
#ifdef MEM_OPT
struct memSegment * seg;
struct memSegment * seg = NULL;
//long psize = sysconf(_SC_PAGESIZE); //long psize = sysconf(_SC_PAGESIZE);
long psize = 64; long psize = 64;
@ -793,7 +792,9 @@ memMalloc(size_t size)
size = (0>=size)?1:(0!=size%psize)?(size/psize)+1:size/psize; size = (0>=size)?1:(0!=size%psize)?(size/psize)+1:size/psize;
size *= psize; size *= psize;
#ifdef MEM_OPT
seg = findElement(segments, size); seg = findElement(segments, size);
#endif
if (NULL == seg) { if (NULL == seg) {
seg = newElement(size); seg = newElement(size);
@ -803,9 +804,6 @@ memMalloc(size_t size)
} }
return seg->ptr; return seg->ptr;
#else
return malloc(size);
#endif
} }
/** /**
@ -819,45 +817,37 @@ memMalloc(size_t size)
void * void *
memCalloc(size_t nmemb, size_t size) memCalloc(size_t nmemb, size_t size)
{ {
#ifdef MEM_OPT
size_t _size = nmemb * size; size_t _size = nmemb * size;
void * mem = memMalloc(_size); void * mem = memMalloc(_size);
memset(mem, 0, _size); memset(mem, 0, _size);
return mem; return mem;
#else
return calloc(nmemb, size);
#endif
} }
void void
memFree(void ** mem) memFree(void ** mem)
{ {
#ifdef MEM_OPT
if (NULL != *mem) { if (NULL != *mem) {
struct memSegment * seg = (*mem - sizeof(struct memSegment)); struct memSegment * seg = (*mem - sizeof(struct memSegment));
if (1 < seg->ref_count) { if (1 < seg->ref_count) {
seg->ref_count--; seg->ref_count--;
} else { } else {
#ifdef MEM_OPT
insertElement(&segments, seg); insertElement(&segments, seg);
#else
free(seg);
#endif
} }
*mem = NULL; *mem = NULL;
} }
#else
if (NULL != *mem) {
free(*mem);
*mem = NULL;
}
#endif
} }
size_t size_t
memGetSize(void * mem) memGetSize(void * mem)
{ {
#ifdef MEM_OPT
struct memSegment * segment; struct memSegment * segment;
if (NULL == mem) { if (NULL == mem) {
@ -866,9 +856,6 @@ memGetSize(void * mem)
segment = (struct memSegment *)(mem - sizeof(struct memSegment)); segment = (struct memSegment *)(mem - sizeof(struct memSegment));
return segment->size; return segment->size;
#else
return 0;
#endif
} }
void void

Loading…
Cancel
Save