c++ - 如何使我的依赖项调用我的全局运算符 new?

标签 c++ windows linux memory

我有一个与某些 DLL(或 .so)链接的测试应用程序。在我的主应用程序中,我定义了一个全局的新建/删除,如下所示:

void* operator new(size_t n)
{
    ....
}

void operator delete(void* p)
{
    ...
}

但我注意到运算符仅针对我在主应用程序中分配的内容调用,但如果其中一个 DLL 调用则不会调用。

如何通过我的运算符新建/删除在 DLL 中进行分配? (这还应该包括 STL 分配的内存,所以如果其中一个 DLL 有一个 std::string,我希望在 STL 分配它的 std::string 内部缓冲区时调用我的 operator new)。

我对 Windows 解决方案更感兴趣,但 Linux 解决方案也将不胜感激。

编辑:也许我最初并不清楚,我正在做的这个测试应用程序是为了跟踪 DLL 中定义的几个自动生成的类的内存使用情况。创建我自己的分配器并在生成的代码 STL 结构中使用它不是一种选择,更何况还有其他非 STL 分配。但是看到答案后,我认为最好的选择是使用分析器或使用 perfmon 简单地监视内存使用情况。

最佳答案

I'd like my operator new to be called when STL allocates its std::string internal buffer

typedef std::basic_string<char, std::char_traits<char>, ALLOCATOR> mystring;

DLL 中的代码已经使用了自己的 new实现,并且没有充分的理由定义您自己的实现应该神奇地更改 DLL 使用的实现(如果它们使用自己的自定义实现怎么办?)。

因此,如果您希望字符串使用您的分配器,则需要显式地创建它们。

关于c++ - 如何使我的依赖项调用我的全局运算符 new?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062173/

相关文章:

Mysql错误1036表是只读的

linux - 如何解决 bash 错误 "syntax error at line 3: ' CYBER_UNAME= $' unexpected"?

C++ 数组和大小

c++ - 使用不带 resize() 部分的相同 vector

c++ - 数组的动态分配

c++ - 进程终止,状态为 -1073741571(0 分钟,3 秒)

python - 在窗口托盘菜单中添加图像

Windows .bat 文件不执行其序列

c - libubox是否支持多线程

linux - Linux系统调用层如何跟踪文件的属性变化