Tod*_*Tod 25 c++ performance stl debug-build
我真的很讨厌使用STL容器,因为它们使我的代码的调试版本运行得非常慢.其他人使用什么代替具有合理性能的调试版本的STL?
我是一名游戏程序员,这对我所参与的许多项目都是一个问题.当你使用STL容器时,很难获得60 fps.
我的大多数工作都使用MSVC.
Jef*_*eff 25
EASTL是一种可能性,但仍然不完美.Electronic Arts的Paul Pedriana对游戏应用程序中的各种STL实现进行了调查,其摘要见以下内容:http: //www.open-std.org/jtc1/sc22/wg21/docs/papers/2007 /n2271.html
正在审查其中一些调整以包含在C++标准中.
请注意,即使EASTL也没有针对非优化案例进行优化.我有一个excel文件w /一段时间了一段时间但我想我已经失去了它,但对于访问它是这样的:
debug release
STL 100 10
EASTL 10 3
array[i] 3 1
Run Code Online (Sandbox Code Playgroud)
我所取得的最大成功就是滚动自己的容器.您可以将这些降低到接近数组[x]的性能.
ras*_*usb 21
我的经验是,设计良好的STL代码在调试版本中运行缓慢,因为优化器已关闭.STL容器向构造函数发出大量调用,operator =在发布版本中进行内联/删除(如果它们很轻).
此外,Visual C++ 2005及更高版本在发布和调试版本中都为STL启用了检查.对于STL重型软件来说,这是一个巨大的性能.可以通过为所有编译单元定义_SECURE_SCL = 0来禁用它.请注意,在不同的编译单元中具有不同的_SECURE_SCL状态几乎肯定会导致灾难.
您可以创建第三个构建配置,并关闭检查并使用它来调试性能.我建议你保持一个调试配置,但是,因为它有助于捕获错误的数组索引和类似的东西.
小智 10
如果您正在运行的视觉工作室,您可能需要考虑以下事项:
#define _SECURE_SCL 0
#define _HAS_ITERATOR_DEBUGGING 0
Run Code Online (Sandbox Code Playgroud)
那只是为了迭代器,你正在进行什么类型的STL操作?您可能希望了解优化内存操作; 即,使用resize()一次插入多个元素,而不是使用pop/push一次插入一个元素.
我敢打赌你的 STL 使用经过检查的实现来进行调试。这可能是一件好事,因为它会捕获迭代器溢出等。如果这对你来说是一个很大的问题,可能有一个编译器开关可以将其关闭。检查你的文档。
归档时间: |
|
查看次数: |
12626 次 |
最近记录: |