Exemplo n.º 1
0
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);
    }
}
Exemplo n.º 2
0
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);
    }
}