C++ OpenGL中绘图函数范围内的静态变量?
例如,我在一些OpenGL应用程序中具有以下绘图功能:C++ OpenGL中绘图函数范围内的静态变量?,c++,function,opengl,static-variables,C++,Function,Opengl,Static Variables,例如,我在一些OpenGL应用程序中具有以下绘图功能: void Terrain::Draw(float ox, float oy, float oz) { float terrainWidth = stepWidth * (width - 1.0f); float terrainLength = stepLength * (length - 1.0f); float startWidth = (terrainWidth / 2.0f) - terrainWidth;
void Terrain::Draw(float ox, float oy, float oz) {
float terrainWidth = stepWidth * (width - 1.0f);
float terrainLength = stepLength * (length - 1.0f);
float startWidth = (terrainWidth / 2.0f) - terrainWidth;
float startLength = (terrainLength / 2.0f) - terrainLength;
(...)
}
Terrain
是一个类,我确信step和Terrain width/length实例变量在对象的生命周期内不会改变(它们在第一次调用draw函数之前初始化)
假设我的应用程序以稳定的25fps运行,该函数将每秒调用25次。这些值永远不会改变,它们总是相同的
将这些函数变量声明为静态变量会有什么好处吗?为了防止每次调用函数时销毁和声明它们?是,并且在调用函数时,也要将它们设置为const。这两者都可以作为编译器优化这些函数变量的提示
尽管差别如此之小,但你至少需要每秒25000次呼叫才能使之有价值。是的,当你在那里时,也要让它们保持恒定。这两者都可以作为编译器优化这些函数变量的提示
尽管差异如此之小,但您至少需要每秒25000次调用才能实现这一目标。如今,编译器非常擅长微优化,因此几乎不可能对它是否会改善或减慢您的程序做出明确的声明
您必须进行基准测试才能真正确定。如今的编译器非常擅长微优化,因此几乎不可能对微优化是否会改进或减慢程序做出明确的声明 你必须进行基准测试才能真正确定 将这些函数变量声明为静态变量会有什么好处吗 这实际上是一个很小的数据量:不要麻烦,除非你有大量的实例 防止在每次调用函数时销毁和声明它们 这通常采取以下形式:
class Terrain {
public:
// interface
protected:
// more stuff
private:
// ... existing variables
const float d_terrainWidth;
const float d_terrainLength;
const float d_startWidth;
const float d_startLength;
};
然后,您可以使用Draw
实现中预先计算的不变量
将这些函数变量声明为静态变量会有什么好处吗
这实际上是一个很小的数据量:不要麻烦,除非你有大量的实例
防止在每次调用函数时销毁和声明它们
这通常采取以下形式:
class Terrain {
public:
// interface
protected:
// more stuff
private:
// ... existing variables
const float d_terrainWidth;
const float d_terrainLength;
const float d_startWidth;
const float d_startLength;
};
然后,您可以使用
Draw
实现中预先计算的不变量。如果这些值从未改变,那么在一个称为25 fps的函数中需要反复计算它们吗?您可以在构造函数中初始化它们,然后在void Terrain::Draw(..)
中使用它们。如果这些值从未更改,那么在一个名为25 fps的函数中需要反复计算它们吗?您只需在构造函数中初始化它们,然后在void Terrain::Draw(..)
中使用它们。