c++메쏘드 정의와 선언
글쓴이: korisaram / 작성시간: 화, 2006/02/14 - 9:25오후
c++에서 메쏘드 선언할때 class 안에서도 가능하고 밖에서도 가능한데요.
class in_method{ void hello(){ cout<<"hello";} };
class out_method{ void hello(); }; void out_method::hello(){ cout<<"hello"; }
예전에 본 책에서 시간이 많이 걸리거나 내용이 길다면 밖에 선언하는게 좋다고 본 기억이 납니다.
근데 class의 안과 밖에서 선언하는게 효율이랑 속도에 영향을 많이 미치나요?
두개가 큰 차이 없다면 class안에서 다 선언하고 싶거든요. 그게 보기에도 이뿌고 편한거 같아서요.
Forums:
클래스 안에서 함수의 본체를 작성하면 일단은 인라인 함수로 인식하지만 덩
클래스 안에서 함수의 본체를 작성하면 일단은 인라인 함수로 인식하지만 덩치가 클 경우에는 알아서 인라인 함수에서 제외됩니다.
요는 실행속도에서는 큰 차이 없다는 것입니다.
다만 이 클래스를 다른 소스파일에서 참조할 경우 c++에서는 include를 쓰는데, 이것이 무식하게 파일을 그대로 읽어들이는 것입니다. 그래서 만일 함수를 클래스 안(좀더 정확히 말하면 클래스와 같은 파일안)에서 작성한다면 컴파일 시간이 꽤나 길어질 수 있습니다.
poklog at http://poksion.cafe24.com/poklog/
[quote]그래서 만일 함수를 클래스 안(좀더 정확히 말하면 클래스와
그러면 컴파일 시간만 많이 걸리고 실행화일을 만들어서 실행시키는데는 영향을 미치는게 아닌거죠?
취미로 배우는데 컴파일 시간에만 영향을 미친다면 class안에서만 해야겠습니다.
한가지 단점은 있겠네요...만일 짧은 함수라도 인라인하기 싫은(?
한가지 단점은 있겠네요...
만일 짧은 함수라도 인라인하기 싫은(?) 함수가 있을 때 그걸 직접 설정 못하는거...
위에 있는 내용 처럼 클래스 선언에서 멤버함수를 구현하면 인라인이 되
위에 있는 내용 처럼
클래스 선언에서 멤버함수를 구현하면 인라인이 되는게 맞습니다.
여기서 고려해야 할 것들이 있습니다.
1. 무조건 inline 좋은가?
2. inline 키워드로 만든 멤버함수랑은 어떻게 차이가 있나?
inline 함수가 항상 일반 함수보다 항상 빠른건 아닙니다.
inline 할려고 하는 함수의 인스트럭션 코드가 크면 CPU의 1차 캐쉬중 인스트럭션 캐쉬 히트률을 떨어 뜨릴 수 있습니다.
캐쉬 히트률 저하는 함수 콜링에 대한 부하 보다 더 비효율적 입니다.
보통 컴파일러가 스스로 판단하여 함수가 좀 크거나 함수 내에 분기문이 들어가 있으면 대부분 인라인으로 확장하는 명령을 무시합니다.
(gcc 의 경우 -Winline 옵션으로 inline 확장이 불가능할 경우 경고문구를 볼 수 있습니다. MSC 에서는 __force_inline 인가(??) 하는 키워드로 무조건 확장하도록 지시할 수 있습니다.)
inline 키워드를 줘서 하면 되지, 클래스 선언에서 멤버함수를 구현할 필요가 있나?
inline 키워드를 이용해 만든 함수나 클래스 멤버함수는 같은 소스파일 내에서만 inline 으로 확장이 됩니다.
즉, inline 확장을 위해서는 컴파일 타임때 inline 함수의 구현소스가 있어야 한다는 것이지요.
하지만, 클래서 선언부에 메소드를 구현해서 헤더파일에 넣어 놓으면, 다른 파일을 컴파일 하더라도 inline 확장이 가능합니다. (헤더파일에 inline 확장할 메소드의 구현소스가 존재하기 때문에 가능하지요.)
최근 MSC 같은 경우는 Whole Program Optimization 이라는 옵션을 통해 타 소스 파일에 있는 inline 함수도 확장이 가능하도록 하는 옵션이 있습니다. (물론, 컴파일은 더 느려지죠. 정확히 말하면 링크 타임이 길어집니다.)
댓글 달기