我读过文章 使用具有零动态分配的协程 TS,作者坚持认为 HALO 适用于协程,并且他提供了一个 godbolt 链接,其中显示了使用 clang 5.0 应用的生成器示例 HALO。
但是,使用最新版本的 clang(godbolt 上的 clang 13.0.1),我可以看到对operator new 的调用。事实上,我找不到任何最新的编译器支持协程的 HALO。我已经在 MSVC 2019/2022、GCC 11.2 上进行了测试,所有程序集都显示对操作符 new 的调用。
我真的可以像作者在那篇文章中所坚持的那样依赖 HALO 吗?例如,即使在 C++17 将复制省略纳入标准之前,RVO 也相当可靠。我的协程应该期待什么 HALO?
原始示例使用 -O3 进行 HALO,但不使用 -O2。
看起来光环确实发生了,但取决于额外的优化过程。
我所做的就是将其更新为 C++20 和 stdx -> std。