读书人

无意中发现的一个性能有关问题

发布时间: 2013-03-25 15:43:04 作者: rapoo

无意中发现的一个性能问题

char* buf;
class A
{
public:
int width;
int height;
void test2();
};
void A::test2()
{
for(int j=0;j<height;j++)
for(int i=0;i<width;i++)
{
buf[j*width+i]=0;
}
}
void test1(int height,int width)
{
for(int j=0;j<height;j++)
for(int i=0;i<width;i++)
{
buf[j*width+i]=0;
}
}
void main()
{
A ma;
ma.width=10000;
ma.height=10000;
buf=new char[ma.width*ma.height];
//test1和test2两个函数代码相同,但test2的耗时比test1多15%
test1(ma.height,ma.width);
ma.test2();
}

有人知道为什么吗? class c
[解决办法]
操作局部变量所需的指令会多一些。
[解决办法]
因为局部变量是要压栈和出栈的,所以有额外的时间消耗啊
[解决办法]
楼主用Release编译下再运行看看。
[解决办法]
汇编面前,了无秘密。

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。

[解决办法]
成员函数多了访问一次this的操作。
[解决办法]
得到了复用性,损失了性能
[解决办法]
先别急着下结论,15%的差别通常不能说明什么问题。你先确定你是否把优化都打开了。然后把循环次数加大,多运行几次,看能不能得到稳定的明显的差异。
[解决办法]
因为局部变量是要压栈和出栈的,所以有额外的时间消耗啊

读书人网 >C语言

热点推荐