gpt4 book ai didi

c++ - 自定义 "::operator new"是否需要 std 容器的特殊分配器?

转载 作者:太空狗 更新时间:2023-10-29 21:03:04 25 4
gpt4 key购买 nike

我已经编写了一个内存分配器来解决 C++ (mingw) 中默认分配器的速度问题。

为此,我重载了全局新建和删除。我通过的所有请求都被正确分配了正确大小的内存,但我仍然遇到段错误。这些错误似乎与 vector 的使用有关。

我假设这些 vector 会被 new 和 delete 的全局覆盖覆盖,但我可能错了。所以我要问的是,我是否需要一个 STL 分配器来脱离我的内存分配器,或者它是否可能是我忽略的使用全局新建和删除的其他问题?

最佳答案

I assume these vectors would be covered by the global override of new and delete but I maybe wrong. So what i'm asking is would I need to have an stl allocator that works off of my memory allocator or is it likely some other problem using global new and delete that I have overlooked?

C++ 标准(来自 C++11)对 std::allocator(用于标准容器的默认分配器)进行了说明:

(§20.6.9/1) Remark: the storage is obtained by calling ::operator new(std::size_t) (18.6.1), but it is unspecified when or how often this function is called. [...]

因此,您没有实现用于 vector 的特殊分配器类这一事实不是问题。问题可能是由于您对全局运算符本身的定义有误,或者可能是由于您使用 vector 的方式有误。建议的后续步骤是:

  • ::operator new不被替换的情况下检查代码是否有效
  • 使用调试器获取崩溃的堆栈跟踪并分析该点的堆栈,以获取有关崩溃中涉及哪些函数、该点局部变量的值是什么等的线索。

关于c++ - 自定义 "::operator new"是否需要 std 容器的特殊分配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14118580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com