我正在研究运行时数据流/模型分析器模块的内存分配器/快照组件。我们的部分要求是将测试程序的数据结构分配在我们控制的自定义内存区域中。为了避免更改测试程序,我们认为我们必须定义自己的 malloc/frees,而实际的快照/运行时检查器模块将使用系统 malloc,我们将通过 LD_PRELOADED 机制获得其指针(感谢 Stackoverflow)。然而,真正的问题在于operator new。我们可以像以前一样走同样的路,但是 new 可能在内部使用 malloc(虽然还没有查看内核/libstdc++ 代码来验证这一点),所以我们最终可能实际上将我们的 malloc 用于测试程序以及运行时检查器模块。我能想出的一种解决方案是重载 operator new 以某种方式找到调用者上下文。(我通常有一个语义,比如创建一个 C++ 对象<在构造函数中设置递归标志> 在析构函数中清除它),根据上下文使用我们的 malloc 或 glibc malloc 分配内存,然后使用 new 的放置语法来确保构造函数被调用。我真的很想要一些关于何时实际调用 C++ 构造函数的指针,我 90% 确定它是 new 的一部分,因为返回一个指向该对象的指针,但我见过的唯一 new 实现(VSCRT)使用 malloc 并且确实没有明显的构造函数调用。我的问题是:1)我想对我的总体想法提出一些反馈意见?2) 何时准确调用构造函数?(我通常有一个语义,比如创建一个 C++ 对象<在构造函数中设置递归标志> 在析构函数中清除它),根据上下文使用我们的 malloc 或 glibc malloc 分配内存,然后使用 new 的放置语法来确保构造函数被调用。我真的很想要一些关于何时实际调用 C++ 构造函数的指针,我 90% 确定它是 new 的一部分,因为返回一个指向该对象的指针,但我见过的唯一 new 实现(VSCRT)使用 malloc 并且确实没有明显的构造函数调用。我的问题是:1)我想对我的总体想法提出一些反馈意见?2) 何时准确调用构造函数?(我通常有一个语义,比如创建一个 C++ 对象<在构造函数中设置递归标志> 在析构函数中清除它),根据上下文使用我们的 malloc 或 glibc malloc 分配内存,然后使用 new 的放置语法来确保构造函数被调用。我真的很想要一些关于何时实际调用 C++ 构造函数的指针,我 90% 确定它是 new 的一部分,因为返回一个指向该对象的指针,但我见过的唯一 new 实现(VSCRT)使用 malloc 并且确实没有明显的构造函数调用。我的问题是:1)我想对我的总体想法提出一些反馈意见?2) 何时准确调用构造函数?然后使用 new 的放置语法来确保构造函数被调用。我真的很想要一些关于何时实际调用 C++ 构造函数的指针,我 90% 确定它是 new 的一部分,因为返回一个指向该对象的指针,但我见过的唯一 new 实现(VSCRT)使用 malloc 并且确实没有明显的构造函数调用。我的问题是:1)我想对我的总体想法提出一些反馈意见?2) 何时准确调用构造函数?然后使用 new 的放置语法来确保构造函数被调用。我真的很想要一些关于何时实际调用 C++ 构造函数的指针,我 90% 确定它是 new 的一部分,因为返回一个指向该对象的指针,但我见过的唯一 new 实现(VSCRT)使用 malloc 并且确实没有明显的构造函数调用。我的问题是:1)我想对我的总体想法提出一些反馈意见?2) 何时准确调用构造函数?1) 我想要一些关于我的总体想法的反馈?2) 何时准确调用构造函数?1) 我想要一些关于我的总体想法的反馈?2) 何时准确调用构造函数?
最好的,Subramanian