gpt4 book ai didi

c++ - g++ 编译器提示在堆栈上分配

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:48 25 4
gpt4 key购买 nike

是否有任何方法可以向编译器提示某些对象可能具有更静态的行为,并在堆栈而不是堆上分配东西?例如,字符串对象在某些函数中可能具有某种常量大小。我问这个是因为我试图通过使用 OpenMP 来提高应用程序的性能。我已经将串行部分从 50 秒缩短到 20 秒,并在并行时缩短到 12 秒(提到大部分代码可以并行运行)。我正在努力继续改进。我认为一个限制与同一进程内动态内存的连续分配和释放有关。到目前为止,串行优化与合并到更 ANSI C 的方法有关,具有更硬编码的变量分配(它们是动态分配的,但考虑到最坏的情况,因此所有内容都分配一次)。现在我几乎卡住了,因为我已经到达了代码的一部分,其中有很多 C++ 方法。

最佳答案

标准std::basic_string模板(其中 std::string 是一个特化)接受一个分配器作为它的第三个参数,你可以提供你自己的基于堆栈的分配器而不是 std::allocator ,但这将是脆弱和棘手的(您可以使用 alloca(3) 并确保所有分配都是内联的;如果它们不是 alloca 将无法按您希望的那样工作。)。我不推荐这种方法。

一个更可行的方法可能是拥有自己的 arena or region based分配器。参见 std::allocator_traits

您也许可以简单地使用 C snprintf(3)在足够大的本地缓冲区上(例如 char buf[128];)

关于c++ - g++ 编译器提示在堆栈上分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26731446/

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