7.24(화) C++ 기초문법 - inline

from Study/C++ 2007/07/24 15:41 view 20193

1 교시

1. 함수호출의원리

// 스택을사용하기때문에약간의오버헤드가발생한다.
int square( int a )
{
    return a * a;
}

// C의해결책- 매크로함수- 하지만버그가너무많다.(특히++연산자같은경우)
#define square( x )    ((x)*(x))

// C++의해결책- inline 함수
inline int square( int x )
{
    return x * x;
}

int main()
{
    int n = square(3);     // push 3 인자를스택에넣고 
                                       // call square 함수를호출한다.
    cout << n << endl;
}

2. inline 함수의정확한개념: 호출시해당함수의기계어코드를치환

int square1( int x )
{
    return x * x;
}

inline
int square2( int x )
{
    return x * x;
}

void
main()
{
    int x = 3;
    int a = square1( x );
    int b = square2( x );

    cout << a << ", " << b << endl;

}

inline 치환을 확인하고 싶을 !

cl. acpp /Fas 로 컴파일 하면 a.asm 어셈블리 코드가 생성된다.
inline 치환을 하고 싶다면 /Ob1 이라는 옵션을 추가하면 된다.

inline 은 컴파일 시간에 결정된다. ( 파일단위로 컴파일 하게 된다. )
inline 은 반드시 호출하는 곳과 같은 곳에 있어야 한다.

3. inline 함수와화일크기 
     1. 일반적으로는 커진다.
     2. 하지만 작은 크기의 함수는 오히려 작아진다.

4. inline
과성능. 
     1. 작은
함수는 분명히 빨라진다.(파일크기도 줄어드므로 캐시에 올라올 유리)
       2.
함수는 캐시 적중률(cache hit) 떨어뜨려서 오히려 도가 줄어든다.

5,
inline 함수와헤더파일 ( internal linkage )
       1. inline 함수는 호출하는 파일과 동일 컴파일 단위에 있어야 한다.
     2. 그래서, 헤더 파일에 만들어서 include 해서 사용하는 것이 기본이다.

6. 함수
포인터와 inline
     1. 결국
인라인 함수는 만들때가 아니라 호출할 적용되는 문법이다.

inline void foo ()
{
    cout << "1" << endl;
}

void main()
{
    foo();    // ok. inline 치환된다.     

    void (*f)() = foo;     

    f();    // inline 치환될까? 대부분의컴파일러에서inline 치환이 
            // 되지않을수있다.
}

Tag |

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다