cpp_inline - 8BitsCoding/RobotMentor GitHub Wiki

ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν• λ•Œ μ•„λž˜μ™€ 같은 λ©”λͺ¨λ¦¬ 접근이 λ°œμƒν•œλ‹€.

  1. λ³€μˆ˜λ“€μ„ μŠ€νƒμ— 푸쉬
  2. ν•¨μˆ˜ μ£Όμ†Œλ‘œ 점프
  3. ν•¨μˆ˜λ₯Ό μ‹€ν–‰
  4. 호좜자 ν•¨μˆ˜λ‘œ λ‹€μ‹œ 점프
  5. 1번 단계에 λ„£μ–΄λ’€λ˜ λ³€μˆ˜λ“€μ„ 팝
  • μœ„ 단계가 λ§ŽκΈ°μ— μ„±λŠ₯μ €ν•˜μ— 영ν–₯을 μ€€λ‹€.

  • CPU μΊμ‹œμ— 졜적이 아닐 수 μžˆλ‹€.

  • λͺ¨λ˜ CPU μ•„ν‚€ν…μ²˜μ—μ„œλŠ” 더 λŠλ¦¬λ‹€.

  • λ”°λΌμ„œ λͺ¨λ“  것을 ν•¨μˆ˜λ‘œ λ§Œλ“œλŠ” 것은 μœ„ν—˜ν•œ 생각일 수 μžˆλ‹€.


그럼 ν•¨μˆ˜λ‘œ λ§Œλ“€λ©΄ μ•ˆλ˜λ‚˜? 무쑰건 λ‚˜μœκ°€?

λ¬Όλ‘ , 가독성을 μœ„ν•΄μ„œ ν•¨μˆ˜λ‘œ λ§Œλ“œλŠ” 것이 쒋은 μΌ€μ΄μŠ€κ°€ μžˆλ‹€.

Vector result = v1.Add(v2);

// Add
Vector result;
result.mX = v1.mX + v2.mX;
result.mY = v1.mY + v2.mY;

이런 상황을 λŒ€λΉ„ν•΄μ„œ inlineν•¨μˆ˜κ°€ λ‚˜μ™”λ‹€.


예제둜 보자

// Animal.h
class Animal {
public:
    Animal(int age);
    inline int GetAge() const;
};

int Animal::GetAge() const
{
    return mAge;
}

μœ„μ™€ 같은 λ°©λ²•μœΌλ‘œ μ‚¬μš©ν•˜λ©΄λ˜κ³ ,,, μ»΄νŒŒμΌλŸ¬λŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ½”λ“œλ₯Ό 볡사/λΆ™μ—¬λ„£κΈ° ν•΄μ€€λ‹€. 마치 MACRO(#define)와 같은 μ—­ν•  단, λ§€ν¬λ‘œλŠ” μ½œμŠ€νƒμ— ν•¨μˆ˜ 이름이 보이지 μ•Šκ³ , λΈŒλ ˆμ΄ν¬ν¬μΈνŠΈλ„ μ•ˆμž‘νžŒλ‹€.


inline의 주의점

  • inline은 μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ½”λ“œλ₯Ό 볡사/λΆ™μ—¬λ„£κΈ° 해달라 쑰언을 ν•  뿐 κ°•μš”ν•˜λŠ” 것이 μ•„λ‹ˆκΈ°μ— μ»΄νŒŒμΌλŸ¬κ°€ inline을 μ μš©ν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€.

μΆ”κ°€λ‘œ __forceinline을 ν•˜λ©΄ κ°•μ œλ‘œ ν•  수 μžˆμ„ 것 κ°™μ§€λ§Œ μ•ˆλ¨...

  • 인라인 ν•¨μˆ˜ κ΅¬ν˜„μ΄ 헀더 νŒŒμΌμ— μœ„μΉ˜ν•΄μ•Όν•œλ‹€.
  • κ°„λ‹¨ν•œ ν•¨μˆ˜μ— 적합(getter, seeter)
  • μ‹€ν–‰νŒŒμΌμ˜ 크기가 μ¦κ°€ν•˜κΈ°κ°€ 쉬움. λ‚¨μš©ν•˜μ§€ 말 것, μ‹€ν–‰νŒŒμΌμ΄ μž‘μ„ 수둝 CPU μΊμ‹œν•˜κ³  잘 λ™μž‘

Example

// getter, setter
inline int GetX() const;
inline void SetX(int x);

inline int GetY() const;
inline void SetY(int y);

// κ°„λ‹¨ν•œ μˆ˜ν•™ν•¨μˆ˜
inline void Scale(const Vector& v);

// μ—°μ‚°μž
inline operator==(const Vector& rhs);