C++ 在c++;
问个简单的问题,如果听起来很幼稚,我道歉。 什么是更快的C++。这样的代码:C++ 在c++;,c++,C++,问个简单的问题,如果听起来很幼稚,我道歉。 什么是更快的C++。这样的代码: ProgramsManager::CurrentProgram->Uniforms->Set(n1); ProgramsManager::CurrentProgram->Uniforms->Set(n2); ProgramsManager::CurrentProgram->Uniforms->Set(n3); ProgramsManager::CurrentProgram->U
ProgramsManager::CurrentProgram->Uniforms->Set(n1);
ProgramsManager::CurrentProgram->Uniforms->Set(n2);
ProgramsManager::CurrentProgram->Uniforms->Set(n3);
ProgramsManager::CurrentProgram->Uniforms->Set(...);
还是这个
Uniforms* u = ProgramsManager::CurrentProgram->Uniforms;
u->Set(n1);
u->Set(n2);
u->Set(n3);
u->Set(...);
我知道第二段代码在解释语言中速度更快,但我觉得在编译语言中没有区别。我说得对吗?
提前谢谢第二个可能会更快,但不会快很多 它可能更快的原因是,如果编译器不能向自己证明,
ProgramsManager::CurrentProgram->Uniforms
可以通过调用…->Set
来更改。如果不能证明这一点,它将不得不为每一行重新计算表达式ProgramsManager::CurrentProgram->Uniforms
然而,现代CPU在这方面通常速度相当快,编译器也越来越好。这里有3种选择,而不是2种
struct
或vector
容器的另一个好处是,容器可以更改,而无需更改函数签名 你说得对。任何像样的编译器都会为这两个对象生成相同的目标代码。@Dúthomhas编译器只会为这两个对象创建相同的代码,前提是它可以确保
Set
不会更改ProgramsManager::CurrentProgram
或Uniforms
底线是对其进行分析,请参见。我知道这种显式缓存可以提供好处。要知道编译器将优化什么或不优化什么并不总是容易的,事实是在汇编语言中。优化设置将影响发出的汇编语言指令。打印并比较两者的汇编语言。还可以尝试使用不同的优化设置。@Galik虽然我没有发现缓存函数指针是有用的,但我发现缓存int值(比如int I=val->x->pos;)可以提供可测量的好处。这取决于传递了多少变量,以及有多少寄存器可用于传递变量。