포슀트

πŸŒ’ 인라이닝 Inlining, 인라인 ν•¨μˆ˜ Inline Function

πŸ’« μ™œ Why


ν•¨μˆ˜ 호좜 μ‹œμ—λŠ” ν•¨μˆ˜ 호좜 κ·œμ•½μ— 따라 μ•½κ°„μ˜ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒ

ν•¨μˆ˜ 호좜 μ „ : λͺ¨λ“  λ ˆμ§€μŠ€ν„° (CPUμ•ˆμ˜ μ €μž₯ 곡간)κ°€ μ €μž₯λ˜μ–΄μ•Ό ν•˜κ³  μΈμˆ˜λ“€μ„ 볡사해야 ν•œλ‹€
ν•¨μˆ˜ 호좜 ν›„ : λ ˆμ§€μŠ€ν„°λ“€μ΄ λ‹€μ‹œ λ³΅κ΅¬λ˜μ–΄μ•Ό ν•œλ‹€

λ§Œμ•½ μ•„μ£Ό κ°„λ‹¨ν•œ ν•¨μˆ˜λΌλ©΄ ν•¨μˆ˜ μ•ˆμ˜ λ¬Έμž₯을 μ‹€ν–‰ν•˜λŠ” μ‹œκ°„λ³΄λ‹€ ν•¨μˆ˜ ν˜ΈμΆœμ„ μ€€λΉ„ν•˜λŠ” μ‹œκ°„μ΄ 더 걸릴 수 μžˆλ‹€

λ”°λΌμ„œ 크기가 μž‘μ€ ν•¨μˆ˜μ˜ κ²½μš°μ—λŠ” 차라리 ν•¨μˆ˜ ν˜ΈμΆœμ„ ν•˜μ§€ μ•Šκ³  μ½”λ“œλ₯Ό λ³΅μ‚¬ν•˜μ—¬μ„œ λ„£μ–΄μ£ΌλŠ” 편이 효율적일 수 μžˆλ‹€


πŸ’« C++ inline


inline ν‚€μ›Œλ“œ (C++)

ν•¨μˆ˜ μ•žμ— λΆ™μœΌλ©΄ μ»΄νŒŒμΌλŸ¬λŠ” ν•¨μˆ˜λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ 곳에 μ½”λ“œ λ„£μ–΄μ€Œ
이λ₯Ό 인라인 ν•¨μˆ˜ Inline Function
ν•¨μˆ˜λ₯Ό 인라인 ν•¨μˆ˜λ‘œ λ§Œλ“€λ©΄ ν•¨μˆ˜ 호좜 μ˜€λ²„ν—€λ“œκ°€ μ‚¬λΌμ§€λ―€λ‘œ ν”„λ‘œκ·Έλž¨μ΄ 더 λΉ λ₯΄κ²Œ 싀행될 수 μžˆλ‹€.

1
2
3
4
inline void printHello()
{
	cout << "Hello";
}

멀버 ν•¨μˆ˜λ₯Ό 클래슀 내뢀에 μ •μ˜ν•˜λ©΄ μžλ™μ μœΌλ‘œ 인라인 ν•¨μˆ˜κ°€ λœλ‹€ (즉 호좜이 멀버 ν•¨μˆ˜ μ½”λ“œλ‘œ λŒ€μΉ˜λœλ‹€)
멀버 ν•¨μˆ˜λ₯Ό 클래슀 외뢀에 μ •μ˜ν•˜λ©΄ 일반적인 ν•¨μˆ˜μ™€ λ™μΌν•˜κ²Œ ν˜ΈμΆœλœλ‹€ (즉 μŠ€νƒμ— μΈμˆ˜λ“€μ„ μ €μž₯ν•˜κ³  λ³΅κ·€μ£Όμ†Œλ₯Ό μ €μž₯ν•œ 후에 멀버 ν•¨μˆ˜λ‘œ μ œμ–΄κ°€ μ΄λ™ν•œλ‹€)

멀버 ν•¨μˆ˜μ˜ 크기가 μž‘μ€ 경우, 클래슀 내뢀에 μ •μ˜ν•˜λŠ” 것이 μ’‹λ‹€ (μƒμ„±μž, Getter, Setter λ“±)
멀버 ν•¨μˆ˜μ˜ 크기가 큰 경우, μ½”λ“œ 볡사 μ‹œ μ‹€ν–‰νŒŒμΌμ˜ 크기가 컀질 수 μžˆμœΌλ―€λ‘œ, 클래슀 외뢀에 μ •μ˜ν•˜λŠ” 것이 μ’‹λ‹€


πŸ’« λ©”λͺ¨


μ΅œμ‹  μ»΄νŒŒμΌλŸ¬λŠ” μ•Œμ•„μ„œ κ°€λŠ₯ν•œ μ˜μ—­κΉŒμ§€ Inlining을 μ§„ν–‰ν•œλ‹€κ³  함

μ•Œμ•„λ‘λ©΄ μ’‹μ§€λ§Œ λ„ˆλ¬΄ μ‹ κ²½μ“°μ§€λŠ” 말 것
λ§ˆμ΄ν¬λ‘œν•œ μ΅œμ ν™”λŠ” μž₯κΈ°μ μœΌλ‘œλŠ” μ„±λŠ₯ ν–₯상에 큰 도움이 λ˜μ§€ μ•ŠμŒ (쒋은 μ½”λ“œμ— 신경써라)


이 κΈ°μ‚¬λŠ” μ €μž‘κΆŒμžμ˜ CC BY 4.0 λΌμ΄μ„ΌμŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€.