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();
}