Index: src/OFObject.m ================================================================== --- src/OFObject.m +++ src/OFObject.m @@ -32,14 +32,14 @@ return self; } - free { - size_t i; + void **iter = __memchunks + __memchunks_size; - for (i = 0; i < __memchunks_size; i++) - free(__memchunks[i]); + while (iter-- > __memchunks) + free(*iter); if (__memchunks != NULL) free(__memchunks); free(self); @@ -95,27 +95,29 @@ } - (void*)resizeMem: (void*)ptr toSize: (size_t)size { - size_t i; + void **iter; if (ptr == NULL) return [self getMemWithSize: size]; if (size == 0) { [self freeMem: ptr]; return NULL; } - for (i = 0; i < __memchunks_size; i++) { - if (__memchunks[i] == ptr) { + iter = __memchunks + __memchunks_size; + + while (iter-- > __memchunks) { + if (*iter == ptr) { if ((ptr = realloc(ptr, size)) == NULL) [[OFNoMemException newWithObject: self andSize: size] raise]; - __memchunks[i] = ptr; + *iter = ptr; return ptr; } } [[OFMemNotPartOfObjException newWithObject: self @@ -146,15 +148,20 @@ toSize: memsize]; } - freeMem: (void*)ptr; { - void *last, **memchunks; + void **iter, *last, **memchunks; size_t i, memchunks_size; - for (i = 0; i < __memchunks_size; i++) { - if (__memchunks[i] == ptr) { + iter = __memchunks + __memchunks_size; + i = __memchunks_size; + + while (iter-- > __memchunks) { + i--; + + if (*iter == ptr) { memchunks_size = __memchunks_size - 1; last = __memchunks[memchunks_size]; if (__memchunks_size == 0 || memchunks_size > SIZE_MAX / sizeof(void*))