c++函数参数传递效率比较,初始化的全局变量方法果然是最快的,而堆方式最慢.

时间:2022-09-21 19:51:35
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()一样,估计是内存页不同缓存没命中才慢些