如何为C++中写的静态库自定义内存分配器

How to custom memory allocator for a static library writen in C++?

本文关键字:静态 自定义 内存 分配器 C++      更新时间:2024-09-30

为了统计静态库a的内存使用情况,我们将编写一个自定义内存分配器或重写运算符new/delete。

由于应用程序中还有其他库,我们只想使用A.如何实现我们的目标?分配器或new/delete是否足够?

重载基类上的new和delete运算符将处理派生类,如本例所示。

这是基本类

class Test {
public:
void* operator new(size_t size);
void operator delete(void*);
Test() { cout<<"Constructor called" << std::endl; }
~Test() { cout<<"Destructor called" << std::endl; }
};

过载操作员:

void* Test::operator new(size_t size)
{
cout<<"Operator new called size:" << size << std::endl;
void *storage = malloc(size);
return storage;
}
void Test::operator delete(void *p )
{
cout<<"delete called" << std::endl;;
free(p);
}

然后,我们为测试定义一个派生类,其中包含一个整数以使其更大。

class Derived : public Test {
int value;
};

测试之后,我们为每个对象创建一个。


int main()
{
Test* test = new Test;
Derived* derived = new Derived;
delete test;
delete derived;
return 0;
}

它导致了预期的行为

Program stdout
Operator new called size:1
Constructor called
Operator new called size:4
Constructor called
Destructor called
delete called
Destructor called
delete called

编译器资源管理器链接:https://godbolt.org/z/sbhdhbsfr