每线程内存分配

Jér*_*ôme 4 c memory-management pthreads

我正在为多线程应用程序开发一个跟踪工具,尤其是关于内存分配的跟踪工具.

我想每线程内存分配.我知道当一个线程执行malloc时,使用的内存是全局堆.我想跟踪哪个线程分配了多少内存.

我在malloc上做了一个包装器,每次有一个malloc时递增值:

void *mymalloc(size_t size) {
    mem_used[thread_id] += size;
    return malloc(size);
}
Run Code Online (Sandbox Code Playgroud)

它运作良好.问题在于free方法,它不返回释放多少内存.

不要考虑我的解决方案,只是为了展示我的尝试.

编辑:

如上所述,保留我自己的桌子是一个太沉重的方法.

paq*_*etp 8

如何改变mymalloc:

int* mymem = malloc(size + sizeof(int)*2);
mymem[0] = thread_id;
mymem[1] = size;
mem_used[thread_id] += size;
return &mymem[2].
Run Code Online (Sandbox Code Playgroud)

然后,在myfree(void*mem)中,您:

void myfree(void* mem)
{
    int* imem = (int*)(mem - sizeof(int)*2);
    int thread_id = imem[0];
    int size = imem[1];
    mem_used[thread_id] -= size;
    free(imem);
}
Run Code Online (Sandbox Code Playgroud)

这可以优化,但我希望你明白......