我有一个与一些DLL(或.so)链接的测试应用程序.在我的主应用程序中,我定义了一个像这样的全局新/删除:
void* operator new(size_t n)
{
....
}
void operator delete(void* p)
{
...
}
但是我注意到操作符只调用我在主应用程序中分配的内容,但是如果其中一个DLL没有.
如何在DLL中进行分配通过我的运算符new / delete? (这也应该包括由STL分配的内存,所以如果其中一个DLL有一个std :: string,我想在STL分配其std :: string内部缓冲区时调用new 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中的代码已经使用了自己的新实现,并且没有充分的理由为什么定义自己的实现应该神奇地改变DLL使用的实现(如果它们使用自己的自定义实现呢?).
因此,如果您希望字符串使用您的分配器,则需要显式创建它们.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。