남들이 안해본것을 해서 궁극적인 지식의 완성을 목표로 하는 블로그입니다.
제품리뷰 , IT, 프로그래밍 관련글을 포스팅합니다.
또한 자기만 읽으려고 만든 정리 노트식의 글들을 싫어합니다. 비전공자나 처음 본 사람도 최대한 이해할 수 있도록 프로그래밍 관련 글들을 쉽게 적으려고 노력하고 있습니다. 보안 계통과 컴퓨터의 Low-Level 한 분야에 관심이 많습니다.
일반적으로 C++에서 레퍼런스를 인자로 받으면, 참조하는 타입의 모든것을 복사하는게 아닌 주소 한번을 넘김으로써 원본에 접근할 수 있어, 포인터 처럼 성능상의 이점을 취할 수 있습니다. 그러면 생각해낸게 "아 그럼 모든 인자는 레퍼런스로 받아야 성능이 좋을까?" 라는 생각이 문뜩들었습니다.
매우 큰 객체들은 (Struct, Class 변수) 레퍼런스로 받는게 당연히 빠를 것이나 그럼 int, double 같은 기본 값 타입들도 Call by Value가 아닌 Call by reference 로 받으면 빠르겠구나! 라고 대충 추정해보았습니다. 일단 레퍼런스로 받으면 빠르다라고 배웠으니깐요..
그런데 찾아보니깐 아니더라구요.. 이에 관련하여 좋은 글을 작성해주신 분이 있어서 관련 링크를 첨부합니다.
결론부터 말하자면 일반적으로 int, double, float 같은 기본 타입들은 포인터나 레퍼런스로 넘기는 것보다 그냥 Call by Value로 넘기는게 더 좋다고 합니다. 이유는 현대 컴퓨터의 H/W 들에서는 기본 타입들의 변수를 명령어 한번에 값을 복사할 수 있다고 합니다. 그런데 이것들을 레퍼런스로 받으면 쓸데 없는 포인터 연산이 더 추가되어서 (어셈블리 코드가 더 추가되어서) 레지스트리를 낭비하거나 하는 문제가 발생할 수 있다고 합니다.
물론 몇 줄의 어셈블리 코드가 추가되는게 성능상에 영향은 사람이 느끼기에 제로에 가깝겠지만, 어쨌든 맹목적으로 "레퍼런스가 무조건 빠르다!" 는 틀린셈이 되겠네요.
알면 알수록 심오한 C++의 세계.. 제가 아직 어셈 코드 읽을 실력이 안되서 글을 100%로 이해하진 못했지만 좋은 내용인거 같습니다 ^^
[C++] 모든 인자값을 레퍼런스로 넘겨야 성능상 유리할까?
일반적으로 C++에서 레퍼런스를 인자로 받으면, 참조하는 타입의 모든것을 복사하는게 아닌 주소 한번을 넘김으로써 원본에 접근할 수 있어, 포인터 처럼 성능상의 이점을 취할 수 있습니다. 그러면 생각해낸게 "아 그럼 모든 인자는 레퍼런스로 받아야 성능이 좋을까?" 라는 생각이 문뜩들었습니다.
매우 큰 객체들은 (Struct, Class 변수) 레퍼런스로 받는게 당연히 빠를 것이나 그럼 int, double 같은 기본 값 타입들도 Call by Value가 아닌 Call by reference 로 받으면 빠르겠구나! 라고 대충 추정해보았습니다. 일단 레퍼런스로 받으면 빠르다라고 배웠으니깐요..
그런데 찾아보니깐 아니더라구요.. 이에 관련하여 좋은 글을 작성해주신 분이 있어서 관련 링크를 첨부합니다.
https://blog.naver.com/rapperkjm/221248422323
C++] Call by Reference가 무조건 좋은가?
오늘 신입분 한분의 코드를 정리하면서 발견한 코드에서 파라미터로 값을 넘길 때 레퍼런스로 모두 도배를 ...
blog.naver.com
결론부터 말하자면 일반적으로 int, double, float 같은 기본 타입들은 포인터나 레퍼런스로 넘기는 것보다 그냥 Call by Value로 넘기는게 더 좋다고 합니다. 이유는 현대 컴퓨터의 H/W 들에서는 기본 타입들의 변수를 명령어 한번에 값을 복사할 수 있다고 합니다. 그런데 이것들을 레퍼런스로 받으면 쓸데 없는 포인터 연산이 더 추가되어서 (어셈블리 코드가 더 추가되어서) 레지스트리를 낭비하거나 하는 문제가 발생할 수 있다고 합니다.
물론 몇 줄의 어셈블리 코드가 추가되는게 성능상에 영향은 사람이 느끼기에 제로에 가깝겠지만, 어쨌든 맹목적으로 "레퍼런스가 무조건 빠르다!" 는 틀린셈이 되겠네요.
알면 알수록 심오한 C++의 세계.. 제가 아직 어셈 코드 읽을 실력이 안되서 글을 100%로 이해하진 못했지만 좋은 내용인거 같습니다 ^^
'프로그래밍 > C++' 카테고리의 다른 글
COMMENT WRITE