调整堆内存大小

Resizing Heap Memory

所以我正在尝试围绕 malloc()realloc() 制作一个非常简单的包装器,以作为垃圾收集器的惰性解决方案。问题是设计垃圾收集器缓冲区。我想存储一个指向指针的指针。

所以我需要在初始化时分配任意大小的内存。我认为问题出在这个函数中。我希望此函数能够在检测到缓冲区已满时调整缓冲区的大小。但目前,只有当我有一个大缓冲区时才会高兴,这样我就不需要使用这个功能了。

typedef struct ALLOC_STRUCT {
    void *cur_ptr;
    int index;
} alloc_T;

typedef struct GC_STRUCT {
    alloc_T **buffer; // Pointer that points to array of alloc_T pointers.
    int count; // Size of the buffer.
} gc_T;

void gc_resize(gc_T *gc) {
    if (gc->count == 4 && gc->count != 0) {
        gc_T *new_gc = realloc(gc, (sizeof *new_gc) + sizeof(uintptr_t) * (gc->count + ALLOCATION));
        if (new_gc) {
            gc = new_gc;
            gc->buffer = realloc(gc->buffer, sizeof(uintptr_t) * (gc->count + ALLOCATION));
            gc->count = gc->count;
        } else {
            // Error handling
        }
    }
}

我想知道这个问题是否可能是 realloc() 调用过多(我认为情况并非如此)或者我对垃圾收集器的实现有误。任何人都可以找到任何问题吗?

如果有人真的感兴趣,这里是源代码: https://github.com/Zernoxi/New_Programming_Language/tree/memory_experiment/src

感谢@JoëlHecht 和@4386427 的帮助。看来我误解了双指针的工作原理。

void gc_resize(gc_T *gc) {
    if (gc->count % 13 == 0 && gc->count != 0) {
        new_buffer = realloc(gc->buffer, sizeof(void *) * (gc->collect + 14));
        if (new_buffer == NULL) {
            // Error handling
        }
        gc->buffer = new_buffer;
    }
}