void* ReallocTrackMemory(void* data, size_t size) { if (data) { unsigned int* data_sz = data - sizeof(unsigned int); unsigned int data_size = *data_sz; //printf("Realloc %i for %i\n", data_size, (unsigned int)size); gTotalMemoryUsage -= data_size; gTotalMemoryUsage += (int)size; if (gTotalMemoryUsage > gPeakMemoryUsage) { gPeakMemoryUsage = gTotalMemoryUsage; } void* new_data = malloc(size + sizeof(unsigned int)); *((unsigned int*)new_data) = (unsigned int)size; new_data = new_data + sizeof(unsigned int); unsigned int i; for (i = 0; i < data_size; i++) { ((char*)new_data)[i] = ((char*)data)[i]; } free((void*)data_sz); return new_data; } else { return MallocTrackMemory(size); } }
void* ReallocTrackMemory(void* data, size_t size) { char* pointer = (char*)data; if (data) { unsigned int* size_record = (unsigned int*)(pointer - sizeof(unsigned int)); unsigned int data_size = (*size_record); gTotalMemoryUsage = gTotalMemoryUsage - data_size; gTotalMemoryUsage = gTotalMemoryUsage + (unsigned int)size; if (gTotalMemoryUsage > gPeakMemoryUsage) { gPeakMemoryUsage = gTotalMemoryUsage; } char* new_data = (char*)malloc(size + sizeof(unsigned int)); if (new_data == NULL) { printf("Error: Could not allocate memory.\n"); fflush(stdout); return 0l; } unsigned int* new_size_record = (unsigned int*)new_data; new_data = (new_data + sizeof(unsigned int)); (*new_size_record) = (unsigned int)size; unsigned int i; for (i = 0; i < data_size && i < (unsigned int)size; i++) { new_data[i] = pointer[i]; } free((void*)size_record); return (void*)new_data; } else { return MallocTrackMemory(size); } }