下面是一个示例代码为什么我开始考虑这个
void renderScene(void)
{
//Clear all pixels
glClear(GL_COLOR_BUFFER_BIT);
// Question : Declaring posAttrib as a static variable is good? or bad?
GLint posAttrib = glGetAttribLocation(programID, "vtxPosition");
glVertexAttribPointer(posAttrib, 3, GL_FLOAT, GL_FALSE, 0, ((void*)(0)));
glEnableVertexAttribArray(posAttrib);
glDrawArrays(GL_POINTS, 0, 3);
//Double buffer
glutSwapBuffers();
}
这是关于OpenGl的,renderScene()
将在我的屏幕渲染时被调用。因此,我认为如果我将posAttrib
声明为静态变量,它将减少不必要的调用。
但是我知道使用静态变量会导致很多问题,所以不要使用它。我考虑过怎样做才是最好的。所以我搜索了一下,读了那些帖子
在循环中声明变量,好习惯还是坏习惯?
全局变量和静态变量的优化
函数中的静态变量
这个帖子说的是but the initialization is likely to take place at each loop iteration.
和you probably should not worry about this kind of optimization.
我读过很多文章,建议不要使用静态变量。
但是另一种观点认为,对于产生高内存复制成本的操作,建议使用静态变量。
基于我的CS知识水平,我不确定何时使用静态变量。
我应该衡量使用和不使用静态变量之间的性能差异来做出决定吗?但随着我与更多的人合作,项目规模越来越大,我预计这种方法将很难使用。我想要有一个基础来决定是否在编写占整个项目一小部分的代码时自己使用它。
所以我的问题是:使用静态变量进行优化的标准是什么?
静态变量访问可能比非静态变量访问少一个或两个时钟周期。(我说"可能"是因为在大多数情况下,对于现代流水线cpu来说,它不会有任何区别。)
在这里或那里节省一个或两个时钟周期的优化几乎不值得做,当然,如果这样做,你就不必担心管理变量,避免错误地覆盖它,等等。
将变量设置为静态作为优化的唯一可行原因不是为了优化变量的访问,而是为了优化变量的初始化。换句话说,如果变量是静态的,那么你可能只能初始化它一次,而如果变量不是静态的,那么你每次想要使用它时都必须初始化它一次。
但是,您也可以使用对象的成员变量来实现这一点,该成员变量在程序运行期间一直存在。因此,重要的是如何使用变量,而不是变量是否是静态的。