티스토리 뷰
목차
반응형
윈도우7 64비트, Int16, Int32, Int64 속도 비교 (C# 코드)
속도 자체만 놓고 보면, 기본 자료형인 Int32가 제일 빠릅니다. 아마도 형변환 속도 순서[참고]도 똑같을 겁니다.
[윈도우7 64비트, Int16, Int32, Int64 속도 비교 (C# 코드)]
윈도우7에서 나온 위의 결과입니다. 소스가 바로 아래에 있습니다. (언어는 C#)
■ 예제 설명
- 10,000 by 10,000의 『배열 3개』를 선언. (Int16, Int32, Int64)
- 배열 내부에 데이터를 할당 대입.
- 별도의 변수 1개에 배열의 값을 차례로 할당.
- 2, 3의 과정을 스톱 워치로 체크.
■ 소스 코드
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace IntIntInt { class Program // C# 코드 { static void Main(string[] args) { Int16 rangeVar16 = 10000; int rangeVar32 = 10000; Int64 rangeVar64 = 10000; // StopWatch Stopwatch sw = new Stopwatch(); // Array, Target variable Int16[,] sixteen = new Int16[rangeVar16, rangeVar16]; Int16 target16 = 0; int[,] thirtytwo = new int[rangeVar32, rangeVar32]; int target32 = 0; Int64[,] sixtyfour = new Int64[rangeVar64, rangeVar64]; Int64 target64 = 0; // Temp variable int tmp1, tmp2; // start // 윈도우7 64비트 Int16 sw.Start(); for (Int16 i6 = 0; i6 < rangeVar16; i6++) { for (Int16 tmpi6 = 0; tmpi6 < rangeVar16; tmpi6++) { sixteen[i6, tmpi6] = tmpi6; } } for (tmp1 = 0; tmp1 < rangeVar16; tmp1++) { for (tmp2 = 0; tmp2 < rangeVar16; tmp2++) { target16 = sixteen[tmp1, tmp2]; } } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds.ToString() + "ms : 16"); sw.Reset(); // 윈도우7 64비트 Int32 sw.Start(); for (int i32 = 0; i32 < rangeVar32; i32++) { for (int tmpi32 = 0; tmpi32 < rangeVar32; tmpi32++) { thirtytwo[i32, tmpi32] = tmpi32; } } for (tmp1 = 0; tmp1 < rangeVar32; tmp1++) { for (tmp2 = 0; tmp2 < rangeVar32; tmp2++) { target32 = thirtytwo[tmp1, tmp2]; } } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds.ToString() + "ms : 32"); sw.Reset(); // 윈도우7 64비트 Int64 sw.Start(); for (Int64 i64 = 0; i64 < rangeVar64; i64++) { for (Int64 tmpi64 = 0; tmpi64 < rangeVar64; tmpi64++) { sixtyfour[i64, tmpi64] = tmpi64; } } for (tmp1 = 0; tmp1 < rangeVar64; tmp1++) { for (tmp2 = 0; tmp2 < rangeVar64; tmp2++) { target64 = sixtyfour[tmp1, tmp2]; } } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds.ToString() + "ms : 64"); sw.Reset(); } // C# 코드 종료 } } | cs |
■ 속도 차이 설명
왜 이런 속도 차이가 나올까?... 해서, 어셈블리 코드를 봤습니다.
[윈도우7 64비트, Int16, Int32, Int64 속도 비교 (C# 코드)]
왼쪽이 Int16, 오른쪽이 Int32. (C# 코드)
윈도우7 64비트에서 Int32란, 기본 자료형인 "int"입니다.
JAE까지 넘어가는데 있어서 Int32의 코드가 더 짧습니다.
"JA >" , "JE =" , "JAE >="
Int 16을 기본 자료형인 Int 32 형태로 교환하는 과정을 거치다 보니 오히려 속도는 느려지네요.
호기심에 점심 시간을 이용해 잠깐 찍어 봤는데 재밌네요 ㅎㅎ.
어셈 코드는 아래 txt 파일에 담겨있으니 참조하세요.
int를 string으로 바꾸는 경우가 많은데 이 포스트도 참조해 보시고 아래 어셈블리 결과도 확인해 보세요.
샘플 Assembly 코드
- Int 16 어셈 코드 - 16.txt [링크]
- Int 32 어셈 코드 - 32.txt [링크]
- Int 64 어셈 코드 - 64.txt [링크]
윈도우7 64비트, Int16, Int32, Int64 속도 비교 (C# 코드)
반응형