C++内存分配追踪

C++内存分配追踪

内存分配堆性能的影响是很大的,有时候我们需要精确的知道内存分配发生在哪里!

有很多工具可以帮助我们定位内存分配的位置。但我们也可以自己手写代码来追踪内存分配。

下面是这部分代码 (注意,这部分代码可以直接拿到自己的项目中,插入使用即可)

需要重写new和delete方法。

// 追踪内存分配
struct AllocationMetrics{
    
    
    int allocatedSize = 0;
    int FreedSize = 0;
    int getMemoryUsage() {
    
    return allocatedSize - FreedSize;}
    void printMemoryUsage() {
    
    std::cout << getMemoryUsage() << std::endl;}
};
static AllocationMetrics am;
void* operator new(size_t size)
{
    
    
    am.allocatedSize += size;
    return malloc(size);
}
void operator delete(void* memory, size_t size)
{
    
    
    am.FreedSize += size;
    free(memory);
}

这里是使用示例

class Object{
    
    
    int x, y, z;
};
int main(){
    
    

    am.printMemoryUsage();
    Object* obj = new(Object);
    am.printMemoryUsage();
    {
    
    
        std::unique_ptr<Object> uno = std::make_unique<Object>();
        am.printMemoryUsage();
    }
    am.printMemoryUsage();
}

猜你喜欢

转载自blog.csdn.net/qq_46480020/article/details/129106751