int b2=0;//全局初始化区 int b3; // 全局未初始化区
void test(int* b){//传指针 500ms-520;如果是在堆区530-700ms
(*b)++;
};
void test2(){//全家变量 340-400ms
b2++;
}
void test3(){ //未未初始化全局变量==! 380-450ms
b3++;
}
void __fastcall test4(int* b){//__fastcall 不开优化居然也600-700ms 比正常调用还慢,应该有哪里不对^^!
(*b)++;
}
int test5(int b){//传值 500ms-520 ,不过考虑只有1个参数,直接在顶了.
return b++;
};
const int loop =10000;//都跑1亿次
for(int i=0;i!=loop;i++){
for(int i2=0;i2!=loop;i2++){
test(&b2);
};
};
看汇编
37 : void test(int* b){ push ebp mov ebp, esp ; 38 : (*b)++; mov eax, DWORD PTR _b$[ebp] mov ecx, DWORD PTR [eax] add ecx, 1 mov edx, DWORD PTR _b$[ebp] mov DWORD PTR [edx], ecxvoid test2(){ push ebp mov ebp, esp
; 41 : void test2(){ push ebp mov ebp, esp; 42 : b2++; mov eax, DWORD PTR ?b2@@3HA ; b2 add eax, 1
mov DWORD PTR ?b2@@3HA, eax ; b2
难怪会快些
void test3()与void test2()一样,估计是内存页不同缓存没命中才慢些