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方法,它不返回释放多少内存.
不要考虑我的解决方案,只是为了展示我的尝试.
编辑:
如上所述,保留我自己的桌子是一个太沉重的方法.
如何改变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)
这可以优化,但我希望你明白......
| 归档时间: |
|
| 查看次数: |
2961 次 |
| 最近记录: |