如何为C++中写的静态库自定义内存分配器
How to custom memory allocator for a static library writen in C++?
为了统计静态库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
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- 将 RTOS 队列对象封装在仅具有静态分配的 IQueue 自定义接口中
- 指向重载静态成员的函数指针 - 在unique_ptr中用作自定义删除器
- 如何将 AST 用于自定义前端操作和 clang 静态分析
- 如何使用静态变量,使用自定义Getter和设置器在SWIG中扩展结构
- C++具有自定义初始化的静态调度
- 跨共享/静态库集成C++自定义内存分配器
- 初始化在 C++ 中自定义类的构造函数中没有参数的静态 const 类成员
- 如何链接自定义静态库
- 指向自定义类型的静态指针在初始化后使用相同类型的静态非空指针保持 nullptr
- 使用自定义比较功能对静态多维数组进行排序
- std::具有自定义比较函数结果的排序函数错误:必须调用对非静态成员函数的引用
- 将自定义 Apache 2.4 模块与 Linux 上的 httpd/apr 库静态链接时出错
- Typedef 具有静态自定义删除器的 shared_ptr 类型,类似于 unique_ptr
- 为什么自定义静态断言的实现不会立即静态断言"true"?
- 如何在VC++静态库中加载自定义二进制资源作为dll的一部分
- 自定义c++静态库不链接(Code::Blocks)