【发布时间】:2017-11-14 14:25:49
【问题描述】:
所以,这是一个悬而未决的问题。但是假设我有一个大型应用程序,它全局覆盖各种 new 和 delete 运算符,以便它们使用自制的 jemalloc 风格的竞技场和自定义对齐方式。
一切都很好,但我一直遇到 segfault 问题,因为其他基于 C++ 的 DLL 及其依赖项也在不应该使用重载分配器(即 LLVM)时使用自定义分配器跪了(缺乏记忆和更多的压力)。
测试变通方法,我已将这些全局运算符包装(并移动)到一个类中,并让所有基类都继承自它。好吧,这适用于类,但不适用于基本类型。这就是问题所在。
鉴于 C++ 不允许有用的东西,例如每个 namespace 有单独的分配器,或限制每个可执行模块的 new 运算符,在基本数据类型中模拟它的最佳方法是什么,我不能直接继承 int?
显而易见的方法是将它们包装在自定义模板中,但问题在于性能。我是否必须在第二层下模拟所有数组和索引操作,以便我可以从不同的地方malloc 而不必更改其余的功能代码?有更好的方法吗?
P.S.:我也一直在考虑使用带有额外参数的特殊全局 new/delete 运算符,而不使用标准运算符。从而确保我(好吧,我的可执行模块是)唯一调用这些全局函数的人。它应该是一个简单的搜索和替换。
【问题讨论】:
-
This 可能感兴趣
标签: c++ templates operator-overloading global-variables dynamic-allocation