+ 이 글은 작성자가 직접 공부하고 복습하며 작성한 글입니다. 만약 직접 작성하지 않았다면, 꼭 출처를 밝히겠습니다!

 + 이 글은 개인적인 공부를 바탕으로 작성되었기에, 틀린 부분이 있을 수 있으며, 틀린 부분이 있다면 알려주시면 감사하겠습니다!

 + 이 글을 다른 곳으로 가져가신다면, 꼭 출처를 남겨주세요~

 + '참고사이트'는 공부하기 위해 참고한 사이트들을 모아 둔 것입니다.

 + 혹시라도 문제가 된다면 바로 조취를 취할테니, 말해주시면 감사하겠습니다!


Q. 매개변수가 있는 함수 호출이 더 빠르다???

 VisualStudio2017에서 매개변수 관련 실험을 하다 신기한 것을 발견했습니다.

 

 바로, 매개변수가 있는 함수 호출이 더 느리다는 것입니다! 

 

 매개변수가 있는 함수가 당연히 더 느릴 줄 알고, 얼마나 더 느린지 실험을 해보려고 한건데... 정반대의 결과가 나와서 참 당황스러웠습니다.


 실험했던 소스코드는 밑에 추가하겠습니다.


 대체 어느 곳에서, 무엇때문에 이런 결과가 나와버린 걸까요...?


<변화한 조건>

 1. 함수 정의 순서를 바꾼다. - [변화없음] 예상대로 주소로 접근하는거라 달라지지 않음.

 2. (결과변화없음) 함수명을 바꾼다.(test1 <-> test2) - [변화없음] 예상대로 주소로 접근하는거라 달라지지 않음.


<소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<iostream>
#include <time.h>
using namespace std;
 
int cnt = 0;
 
void test1() {
    cnt++;
}
 
void test2(int a, int b, int c) {
    cnt++;
}
 
int main() {
    clock_t start;
    clock_t end;
    bool asdf = true;
    int count = 0;
 
    int a = 3;
    int b = 5;
    int c = 12;
 
    while (count < 5) {
 
        start = clock();
 
        cnt = 0;
 
        for (int i = 0; i < 200000000; i++) {
            test1();
            //test2(a, b, c);
        }
 
        end = clock();
 
        cout << (double)(end - start) / CLOCKS_PER_SEC << endl;
 
        count++;
    }
    return 0;
}
 
cs

<소스코드 결과>
[test1] : 2.9 ~ 3.0 sec
[test2] : 2.8 ~ 2.9 sec


왜 이런 결과가 나오는 걸까요...?ㅠㅠ




Copyright © -강정이좋아- 무단 전재 및 재배포는 하지 말아주세요.

+ Recent posts