首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STL替代方案

STL替代方案
EN

Stack Overflow用户
提问于 2008-09-17 20:09:47
回答 15查看 14.4K关注 0票数 27

我真的讨厌使用STL容器,因为它们使我的代码的调试版本运行得非常慢。对于调试构建,其他人使用什么来代替具有合理性能的STL?

我是一名游戏程序员,这在我工作过的许多项目中都是一个问题。当你使用STL容器时,很难获得60帧/秒的速度。

我的大部分工作都使用MSVC。

EN

回答 15

Stack Overflow用户

发布于 2008-09-17 20:38:24

EASTL是一种可能性,但仍然不是完美的。电子艺界的Paul Pedriana就游戏应用程序中的性能对不同的STL实现进行了调查,其摘要可在此处找到:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html

正在审查其中一些调整,以将其包含在C++标准中。

请注意,即使是EASTL也不会针对未优化的情况进行优化。前段时间我有一个excel文件,但我想我把它弄丢了,但对于访问来说,它是这样的:

代码语言:javascript
复制
       debug   release
STL      100        10
EASTL     10         3
array[i]   3         1

我获得的最大的成功是滚动我自己的容器。您可以将这些性能降低到接近arrayx的性能。

票数 25
EN

Stack Overflow用户

发布于 2008-09-17 20:37:17

我的经验是,设计良好的STL代码在调试版本中运行缓慢,因为优化器被关闭了。STL容器会向构造函数和operator=发出大量调用(如果它们是轻量级的),它们会在发布版本中被内联/移除。

此外,Visual STL2005和更高版本在发布和调试版本中都启用了C++检查。对于以STL为主的软件来说,这是一个巨大的性能难题。可以通过为所有编译单元定义_SECURE_SCL=0来禁用它。请注意,在不同的编译单元中拥有不同的_SECURE_SCL状态几乎肯定会导致灾难。

您可以在关闭检查的情况下创建第三个构建配置,并使用该配置进行性能调试。我建议你保持一个带检查的调试配置,因为这对捕获错误的数组索引和诸如此类的东西非常有帮助。

票数 21
EN

Stack Overflow用户

发布于 2008-09-17 20:27:49

如果你运行的是visual studio,你可能需要考虑以下几点:

代码语言:javascript
复制
#define _SECURE_SCL 0
#define _HAS_ITERATOR_DEBUGGING 0

这只适用于迭代器,您要执行哪种类型的STL操作?您可能希望考虑优化内存操作;即,使用resize()一次插入多个元素,而不是使用pop/push一次插入一个元素。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/87096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档