无意中发现的一个性能有关问题
无意中发现的一个性能问题char* bufclass A{public:int widthint heightvoid test2()}void A::test2(
无意中发现的一个性能问题
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%的差别通常不能说明什么问题。你先确定你是否把优化都打开了。然后把循环次数加大,多运行几次,看能不能得到稳定的明显的差异。
[解决办法]因为局部变量是要压栈和出栈的,所以有额外的时间消耗啊