반응형
C 언어에서 연속적으로 동적할당(malloc)를 하고 풀어주는(free)것을 반복하는것이 빠를까?
아니면 한번 동적할당을 하고 초기화 시켜서 사용하고 그것을 풀어주는것이 빠를까?
( 물론 정답은 예상했던 대로 나왔다. )
그 궁금증으로 인해 다음과 같은 소스를 입력해서 차이를 알아 보았다.
===========================================================================================
01: #include <stdio.h>
02: #include <stdlib.h>
03: #include <sys/timeb.h>
04:
05: void someMethod1();
06: void someMethod2();
07:
08:
09: void main(void) {
10: struct timeb start;
11: struct timeb end;
12:
13: ftime(&start);
14: someMethod1();
15: ftime(&end);
16:
17: printf("for ( 1000000 ) { malloc(1024); free; } \n");
18: printf("Start Time : %ld , %d\n",start.time, start.millitm);
19: printf(" End Time : %ld , %d\n",end.time, end.millitm);
20: printf(" Diff Time : %ld , %d\n", end.time - start.time , end.millitm - start.millitm );
21:
22: printf("\n\n\n");
23:
24: ftime(&start);
25: someMethod2();
26: ftime(&end);
27:
28: printf("malloc(1024) for ( 1000000 ) { memset(t,0,sizeof(t); } free; \n");
29: printf("Start Time : %ld , %d\n",start.time, start.millitm);
30: printf(" End Time : %ld , %d\n",end.time, end.millitm);
31: printf(" Diff Time : %ld , %d\n", end.time - start.time , end.millitm - start.millitm );
32:
33:
34: }
35:
36:
37: void someMethod1() {
38: char *t;
39: int i;
40:
41: for ( i = 0 ; i < 1000000 ; i++) {
42: t = (char*)malloc(1024);
43: free(t);
44: }
45: }
46:
47:
48: void someMethod2() {
49: char *t;
50: int i;
51:
52: t = (char*)malloc(1024);
53: for ( i = 0 ; i < 1000000 ; i++) {
54: memset(t,0,sizeof(t));
55: }
56: free(t);
57: }
===========================================================================================
결과는 다음과 같다.
===========================================================================================
for ( 1000000 ) { malloc(1024); free; }
Start Time : 1073155570 , 625
End Time : 1073155571 , 609
Diff Time : 1 , -16
malloc(1024) for ( 1000000 ) { memset(t,0,sizeof(t); } free;
Start Time : 1073155571 , 609
End Time : 1073155571 , 640
Diff Time : 0 , 31
Press any key to continue
===========================================================================================
결과를 보다시피 메모리를 잡았다 풀었다를 반복하는것보다
한번 잡고 새로 셋팅해주는 것이 약 3배나 시간이 짧게 걸렸다.
테스트 환경
Window XP, VS 6.0 , 확장자로 c 사용.
아니면 한번 동적할당을 하고 초기화 시켜서 사용하고 그것을 풀어주는것이 빠를까?
( 물론 정답은 예상했던 대로 나왔다. )
그 궁금증으로 인해 다음과 같은 소스를 입력해서 차이를 알아 보았다.
===========================================================================================
01: #include <stdio.h>
02: #include <stdlib.h>
03: #include <sys/timeb.h>
04:
05: void someMethod1();
06: void someMethod2();
07:
08:
09: void main(void) {
10: struct timeb start;
11: struct timeb end;
12:
13: ftime(&start);
14: someMethod1();
15: ftime(&end);
16:
17: printf("for ( 1000000 ) { malloc(1024); free; } \n");
18: printf("Start Time : %ld , %d\n",start.time, start.millitm);
19: printf(" End Time : %ld , %d\n",end.time, end.millitm);
20: printf(" Diff Time : %ld , %d\n", end.time - start.time , end.millitm - start.millitm );
21:
22: printf("\n\n\n");
23:
24: ftime(&start);
25: someMethod2();
26: ftime(&end);
27:
28: printf("malloc(1024) for ( 1000000 ) { memset(t,0,sizeof(t); } free; \n");
29: printf("Start Time : %ld , %d\n",start.time, start.millitm);
30: printf(" End Time : %ld , %d\n",end.time, end.millitm);
31: printf(" Diff Time : %ld , %d\n", end.time - start.time , end.millitm - start.millitm );
32:
33:
34: }
35:
36:
37: void someMethod1() {
38: char *t;
39: int i;
40:
41: for ( i = 0 ; i < 1000000 ; i++) {
42: t = (char*)malloc(1024);
43: free(t);
44: }
45: }
46:
47:
48: void someMethod2() {
49: char *t;
50: int i;
51:
52: t = (char*)malloc(1024);
53: for ( i = 0 ; i < 1000000 ; i++) {
54: memset(t,0,sizeof(t));
55: }
56: free(t);
57: }
===========================================================================================
결과는 다음과 같다.
===========================================================================================
for ( 1000000 ) { malloc(1024); free; }
Start Time : 1073155570 , 625
End Time : 1073155571 , 609
Diff Time : 1 , -16
malloc(1024) for ( 1000000 ) { memset(t,0,sizeof(t); } free;
Start Time : 1073155571 , 609
End Time : 1073155571 , 640
Diff Time : 0 , 31
Press any key to continue
===========================================================================================
결과를 보다시피 메모리를 잡았다 풀었다를 반복하는것보다
한번 잡고 새로 셋팅해주는 것이 약 3배나 시간이 짧게 걸렸다.
테스트 환경
Window XP, VS 6.0 , 확장자로 c 사용.
반응형
'공부 > 컴퓨터' 카테고리의 다른 글
파일 정보 관련 함수. (0) | 2004.01.05 |
---|---|
배열의 동적 할당사용시 주의점. (0) | 2004.01.05 |
시간 관련 함수. (0) | 2004.01.04 |
Assert 사용하기 - JDK 1.4 이상 지원 (0) | 2004.01.03 |
Drag & Drop ( 드래그 드랍 지원하기 ) (0) | 2004.01.03 |