我的问题主要是关于STL而不是C++的其他部分可以比较(我猜)和C一样快,只要每个角都不使用类.
STL是游戏和OGRE3D等引擎的标准,但我想知道如果STL的功能很好用,问题是虽然我真的不知道它们是如何工作的,但我应该先知道在使用之前哪些功能会导致严重的生猪他们.
我很兴奋开始那个游戏编程学校,显然我不会不使用这些高级功能.
在许多情况下,使用STL往往会产生与手写代码相比更高效的代码.
使用分析器查看您遇到问题的位置.
即使C++ STL可能表现更差,其代码也可能不易出错.因此,只有在探查器显示存在问题时才编写代码
1)调试构建.由于过多的错误检查,Severaly减慢了许多stl容器.至少在Microsoft编译器上.
2)动态内存分配过多.如果你有一个包含std :: vector的例程,如果你每帧会调用几千次,那么它将非常慢并且瓶颈将在operator new或另一个内存分配例程中.如果您将此向量转换为某种静态缓冲区(因此您不必每次都重新创建它),它会更快.内存分配很慢.如果你有一个缓冲区,通常最好重复使用它,而不是在每次调用期间重新创建一个缓冲区.
3)使用低效算法.例如,使用线性搜索而不是二进制搜索,使用错误的排序算法(例如,快速排序,堆排序比未排序数据上的冒泡排序更快,但插入排序可能比部分排序数据上的快速排序更快).搜索而不是使用std :: map,等等.
4)使用错误的容器.例如,std :: vector不适合在随机位置插入元素.std :: deque,虽然与std :: vector(随机访问)相当,但允许快速push_front和push_back,如果你减去两个迭代器(在MSVC上再次),它可以比std :: vector慢10倍.
除非您从头开始构建整个引擎,否则您不会注意到使用或不使用C++类或STL的区别.通常,大多数情况下,CPU将运行甚至不是由您编写的代码.此外,您实现的任何脚本语言(Lua,Python等)所产生的开销都会超过使用C++/STL可能导致的任何小的性能损失.
总之,不要担心.编写好的OOP代码比尝试从一开始编写超快代码要好."过早的优化是很多编程邪恶的根源."
归档时间: |
|
查看次数: |
1270 次 |
最近记录: |