void* THRealloc(void *ptr, long size) { if(!ptr) return(THAlloc(size)); if(size == 0) { THFree(ptr); return NULL; } if(size < 0) THError("$ Torch: invalid memory size -- maybe an overflow?"); THHeapUpdate(-getAllocSize(ptr)); void *newptr = realloc(ptr, size); if(!newptr && torchGCFunction) { torchGCFunction(torchGCData); newptr = realloc(ptr, size); } THHeapUpdate(getAllocSize(newptr ? newptr : ptr)); if(!newptr) THError("$ Torch: not enough memory: you tried to reallocate %dGB. Buy new RAM!", size/1073741824); return newptr; }
void* THRealloc(void *ptr, ptrdiff_t size) { if(!ptr) return(THAlloc(size)); if(size == 0) { THFree(ptr); return NULL; } if(size < 0) THError("$ Torch: invalid memory size -- maybe an overflow?"); ptrdiff_t oldSize = -getAllocSize(ptr); void *newptr = realloc(ptr, size); if(!newptr && torchGCFunction) { torchGCFunction(torchGCData); newptr = realloc(ptr, size); } if(!newptr) THError("$ Torch: not enough memory: you tried to reallocate %dGB. Buy new RAM!", size/1073741824); // update heapSize only after successfully reallocated THHeapUpdate(oldSize + getAllocSize(newptr)); return newptr; }
static void* THAllocInternal(ptrdiff_t size) { void *ptr; if (size > 5120) { #if (defined(__unix) || defined(__APPLE__)) && (!defined(DISABLE_POSIX_MEMALIGN)) if (posix_memalign(&ptr, 64, size) != 0) ptr = NULL; /* #elif defined(_WIN32) ptr = _aligned_malloc(size, 64); */ #else ptr = malloc(size); #endif } else { ptr = malloc(size); } THHeapUpdate(getAllocSize(ptr)); return ptr; }
void THFree(void *ptr) { if (ptr) { THHeapUpdate(-getAllocSize(ptr)); free(ptr); } else { #ifdef __DEBUG printf("THFree called with ptr==0\n"); #endif } }
void THFree(void *ptr) { THHeapUpdate(-getAllocSize(ptr)); free(ptr); }