kwondroid의 개발 세계

a += 3 과 b = b + 3 의 속도 차이 본문

개발

a += 3 과 b = b + 3 의 속도 차이

kwondroid 권오철 2018. 3. 29. 04:30

오늘 학교에서 C 수업을 듣는데 교수님께서 'a += 3' 과 'b = b + 3'중에선 전자가 더 빠르다고 말씀하시더군요.

JAVA를 공부할때 저 둘의 코드가 같은 바이트코드를 생성한다고 기억하는데 C라고 어셈블리 수준에서 다른 코드를 만드나 의문이 들었죠.

그래서 아는 개발자분들께 여쭤봤는데 한분께서 같은 어셈블리 코드로 처리되는 사진을 보내주시더라구요.


그래서 저도 다른 툴의 도움을 얻어서 어셈블리 코드를 얻어봤습니다.


어셈블리 코드를 본 결과 a += 3과 b = b + 3은 똑같이 동작합니다.


HTML이 프로그래밍 언어라고 알려주는거 보고 정이 뚝 떨어진 Naver에서는 '어셈블리어'를 이렇게 정의하고 있습니다.



저는 이걸 같은 어셈블리 코드는 같은 기계어로 바뀐다는 뜻으로 이해했습니다. 같은 기계어는 같은 동작을 하며 이론적으로는 같은 퍼포먼스를 내겠죠.


다른 개발자분께서 어셈의 isa에 대한 내용은 있으나 각 마이크로 아키텍쳐별 동작 방식은 다를 수 있다고, implementation defined이라면 그 동작은 제조사 마음대로라고 말씀해주셨습니다.

제조사 마음대로 동작을 하지만 그 동작도 같은 어셈블리 코드라면 똑같이 실행을 할텐데말이죠...


이러한 논리를 들어 교수님께 말씀을 드렸지만 같은 어셈블리 코드라도 H/W 위에 올라가면 속도가 다르다는 말씀하셨는데... 제가 H/W를 잘 몰라서 더이상 대화를 이어나가지는 못했습니다.


제가 잘못듣거나 잘못 이해한건가요? 아니면 S/W적으로 제가 모르는 어떤것이 있는건가요?

혹시 교수님의 말씀이 어떤 뜻인지 알고계신 분들은 알려주세요... 몇시간째 고민해도 답 안나와서 이시간까지 이렇게 글을 씁니다. (학교가야하는데...ㅠ)


실제 컴퓨터가 동작할때는 다른 쓰레드의 스케줄링으로 인해 연산 우선순위가 나중으로 지정되어 결과값이 늦게 나올수는 있겠지만... 그런건 여기서 신경쓰지 맙시다.

a += 3과 a = a + 3의 속도차이를 보는데는 다른것 생각 할 것 없이 어셈블리 코드만 생각하자구요!!


Comments