웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
++와 +=1 의 속도차이
2004.07.12 17:54
변수 $i를 가정하고
$i++ 과 $i+=1 은 $i를 1증가시키는 구문입니다.
과연 저 둘이 실제상황(?)에서 속도차이를 보일까 하는 의문에서
간단한 실험을 했습니다.
일단
for($i = 0; $i < 1000000; $i++); 와
for($i = 0; $i < 1000000; $i+=1); 를 따로 실행해서
마이크로초 단위로 실행시간을 계산해본 결과,
$i++ 일때
0.87869
0.859785
0.93886
0.882139
0.924311
0.872625
0.866393
0.890392
0.889265
0.866099
0.861506
0.880137
$i+=1 일때
0.928549
0.950968
0.995221
0.954347
0.941408
0.940832
0.957434
0.990631
0.936167
0.963263
0.966622
0.98165
백만번 루프에서 0.1초 이내의 차이가 나는것이 확인되었습니다.
아마도 파서에의해 번역될때,
++는 어셈블리 INC ecx 명령으로 번역되고,
+=1은 어셈블리 ADD ecx, 1 정도로 번역된다고 생각합니다.
저 둘의 처리 속도차이로 이와같은 결과가 생긴다고 생각되는군요. (;)
역시 크게 신경쓰문제는 아닐듯 합니다.
$i++ 과 $i+=1 은 $i를 1증가시키는 구문입니다.
과연 저 둘이 실제상황(?)에서 속도차이를 보일까 하는 의문에서
간단한 실험을 했습니다.
일단
for($i = 0; $i < 1000000; $i++); 와
for($i = 0; $i < 1000000; $i+=1); 를 따로 실행해서
마이크로초 단위로 실행시간을 계산해본 결과,
$i++ 일때
0.87869
0.859785
0.93886
0.882139
0.924311
0.872625
0.866393
0.890392
0.889265
0.866099
0.861506
0.880137
$i+=1 일때
0.928549
0.950968
0.995221
0.954347
0.941408
0.940832
0.957434
0.990631
0.936167
0.963263
0.966622
0.98165
백만번 루프에서 0.1초 이내의 차이가 나는것이 확인되었습니다.
아마도 파서에의해 번역될때,
++는 어셈블리 INC ecx 명령으로 번역되고,
+=1은 어셈블리 ADD ecx, 1 정도로 번역된다고 생각합니다.
저 둘의 처리 속도차이로 이와같은 결과가 생긴다고 생각되는군요. (;)
역시 크게 신경쓰문제는 아닐듯 합니다.
댓글 7
-
DearMai
2004.07.12 18:11
아주 대형 알고리즘이 들어가는 프로그램이 아니고선 크게 차이가 나지 않겠네요 ^ㅡ^ -
플로렐라
2004.07.12 18:38
DearMai // 버블쇼트 같은게 아니라면 크게 신경쓸건 못되죠^-^;;; 그저 이런것도 있다..란걸 알리기 위해;;;
(몇가지 더 속도차이에 대한걸 실험해볼 생각;; 제가 하는게 뭐 이렇다는;;; 으헤에;;)
(뭐, 더빠르고 효율적인 처리로 우주의 엔트로피 증가를 느리게해 우주종말을 연기하는 효과도 있을지 모른다는 생각도;;;;;;) -
TheMics
2004.07.12 20:56
저것들은 애초에 방식이 다르죠;
관련글을 아마 플로렐라님께서 직접 올리셨었죠 아마? -
chipper
2004.07.12 22:57
읽어볼만한 글입니다.
++ 와 += 의 차이가 극명하게 날 정도의 알고리즘이라면 php 보다는 c 나 c++ 을 쓰겠지만요^^ -
플로렐라
2004.07.13 17:09
더믹스 // 전에 ++와 +=가 다르다고 올렸었는데,
이번에 다시해보니 ++쪽도 2^31+1이 되니 변수형이 더블로 변하면서 숫자가 올라가던..
php파서 버전에 따라 다른건가.. 설정이 있는건가..
c언어에서도 ++와 +=가 다르게 번역(컴파일)될듯 하군요.. (역시 아주약간의 속도차이..;) -
☆~
2004.07.13 17:29
++은 cpu의 레지스터 인지 머시기 (이름이 잘 =_=)에서 직접 가산한다고 하더군요..
++와 +=의차이가 있었는데.. ++은 16비트인지 32비트인지의 정수형까지밖에 가산이 않된다는군요..
( ++은 위의 cpu의 이름모를 곳에서 처리를 하고 리턴하는것 떼문이라고 하던것 같은... -0ㅡ;
요즘의 컴파일러는 최적화를 하면서 i = 1 + i; 가 있으면 i++;와 같은 코드가 나온다던데.. 그건 php와 상관 없군요 =_=;; -
권순현
2004.09.17 23:39
++ 같은경우 cpu 의 Register에 Accumulator(누산기)가 INC dx 이라는 Parser 에 의해 번역된 문장을 실행하는 걸로 알고 있었던데.. 아닌가요?
+= 같은경우 cpu 의 Register에 LOAD 하고, ADD dx,1 하고, STORE(맞나요?) 하고...
높은 Clock 을 가지고 있는 CPU 는, 차이가 미미하지만,
낮은 Clock 을 가지고 있는 CPU 는, 차이가 조금 더 합니다.
(166Mhz 짜리로 실험하려고 했습니다만, 학교측에서 무리를 준다고 허가를 받지 못했습니다)
(서버측쪽에서 계산하는 php 의 경우는 서버사양, 클라이언트쪽에서 계산하는 jas 는 클라이언트사양입니다.)
제목 | 글쓴이 | 날짜 |
---|---|---|
4. 디렉토리 관련함수 [1] | 한꼬마 | 2002.10.04 |
3. URL 관련 함수 [1] | 한꼬마 | 2002.10.04 |
2. MYSQL 관련 함수 [2] | 한꼬마 | 2002.10.04 |
1. 데이터베이스 질의어(SQL) 다루기 [4] | 한꼬마 | 2002.10.04 |
[PHP...쿠키편] 4강: 쿠키 실전 프로그래밍 - 2 / 2
[3]
![]() | TheMics | 2002.09.23 |
[PHP...쿠키편] 4강: 쿠키 실전 프로그래밍 - 1 / 2
[2]
![]() | TheMics | 2002.09.23 |
[PHP 초보에서 중수로 - 쿠키편] 3강 : 쿠키 실전 사용
![]() | TheMics | 2002.09.21 |
[추천 강의] 플래시로 보는 노프레임 홈 만들기! [63] | ROBIN | 2002.09.18 |
초보의 절대경로 알아내기.. #2 [6] | 아이쿠 | 2002.09.17 |
초보의 절대경로 알아내기.. #1 | 아이쿠 | 2002.09.17 |
개인 서버 운영하시는분 서버 꺼졌을때 메시지 띄우기; [12] | 실버 | 2002.09.11 |
전에 올렸던 게시판입니다. JHboard 게시판 중도 포기작품..!;
[5]
![]() | Myzzix | 2002.09.09 |
디렉토리의 내용을 가져오는 방법 [2] | DHelper | 2002.09.02 |
[php] 스킨 해석&출력... [2] | 엔카일 | 2002.09.01 |
[추천 팁] 오에카키 PHP 버전으로 만들기 [19] | 소프트맨 | 2002.08.31 |
[PHP 초보에서 중수로 - 쿠키편] 2강 : 쿠키 다루기
[3]
![]() | TheMics | 2002.08.31 |
[PHP 초보에서 중수로 - 쿠키편] 1강 : 쿠키의 이해
[2]
![]() | TheMics | 2002.08.31 |
초보의 php를 활용한 OneFrame(NoFrame) 홈페이지 만들기 - 4 end [15] | 아이쿠 | 2002.08.30 |
초보의 php를 활용한 OneFrame(NoFrame) 홈페이지 만들기 - 3 [1] | 아이쿠 | 2002.08.30 |
초보의 php를 활용한 OneFrame(NoFrame) 홈페이지 만들기 - 2 [11] | 아이쿠 | 2002.08.30 |