[C++] keyword: inline, __inline, __forceinline
1. ์ค๋ช
1.1) inline
inline ํค์๋๋ ํจ์ ํธ์ถ ์ ๋ฐ์ํ๋ ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ธฐ ์ํด ํจ์๋ฅผ ํธ์ถํ๋ ๋์ ํจ์๊ฐ ํธ์ถ๋๋ ๊ณณ๋ง๋ค ํจ์์ ์ฝ๋๋ฅผ ๋ณต์ฌํด ๋ฃ์ด์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ํจ์ ํธ์ถ ์ ๋ฐ์ํ๋ ์ค๋ฒํค๋๋ ๋ญ๊น? ์ค์ ๋ก ํจ์๊ฐ ํธ์ถ๋๋ ๊ณผ์ ์ ์์ฝํ๋ฉด
1. ํจ์์ ์ธ์๋ฅผ ์คํ์ ์ ์ฅ 3. ํจ์์ ์์ ์ฃผ์๋ก ์ ํ 4. ํจ์์ ์ฝ๋ ์คํ 5. ํจ์์์ ๋ง๋ค์ด์ง ์ง์ญ๋ณ์, ์คํ์ ์ ์ฅ๋ ์ธ์ ํด์ , ๋ฆฌํด ๊ฐ์ ๋ ์ง์คํฐ์ ์ ์ฅ 6. ํจ์๋ฅผ ํธ์ถ ํ ๋ ์ ์ฅํด๋ ์ฃผ์๋ก ๋๋์๊ฐ |
์์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋๋ฐ ๊ฐ๋จํ ํจ์๋ฅผ ํธ์ถํ๊ธฐ ์ํด์ ์ ๋ฐ ๋ช ๋ น์ด๋ค์ ์ํํด์ผ ํ๋ค๋ฉด ์ค๋ฒํค๋๊ฐ ๋ ์๋ฐ์ ์๋ค. ์ด๋ฐ ์ค๋ฒ ํค๋๋ฅผ ์ค์ด๊ธฐ ์ํด C++์์๋ inline์ด๋ผ๋ ํค์๋๋ฅผ ์ ๊ณตํ๋ค.
๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํจ์ ํธ์ถ ๊ณผ์ ์์ด ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋ณต์ ํ์ฌ ๋ฃ์ด์ฃผ๋ฏ๋ก ์๋๊ฐ ๋ ๋น ๋ฅด๋ค. ๋จ, ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋ณต์ ํ ๋งํผ ์คํ ํ์ผ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ ๋จ์ ์ด ์๋ค.
inline ํค์๋๋ ๊ถ์ฅ ์ฌํญ์ผ ๋ฟ ์ปดํ์ผ๋ฌ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ inline ํค์๋๋ฅผ ์ ์ธํด๋ ์์ ๋กญ๊ฒ ๋ฌด์ํ ์ ์๋ค. (๊ธด ํจ์๋ฅผ inlineํ ํ๋ ค๊ณ ํ๋ฉด ๋ฌด์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค)
๋ฐ๋๋ก ํ๋ก๊ทธ๋๋จธ๊ฐ inline์ ์ ์ธ ์ํด๋ ์ปดํ์ผ๋ฌ๊ฐ ์ฑ๋ฅ์ ์ํด inlineํ ์ํฌ ์๋ ์๋ค.
1.2) __inline
inline๊ณผ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๋ค. ๋จ, inline์ C++ ์ ์ฉ ํค์๋์ง๋ง __inline์ C์์๋ ์ฌ์ฉํ ์ ์๋ค.
1.3) __forceinline
__forceinline ํค์๋๋ ์ปดํ์ผ๋ฌ์ ๋น์ฉ/์ด์ต ๋ถ์์ ๋ฌด์ํ๊ณ ํ๋ก๊ทธ๋๋จธ์ ํ๋จ์ ์์กดํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฌด๋ถ๋ณํ ์ฌ์ฉ์ ์ฝ๋๊ฐ ์ปค์ง๊ณ ์ฑ๋ฅ ํฅ์์ ๋ฏธ๋ฏธํ ์ ์๋ค.
__forceinline ํค์๋๋ฅผ ์ฌ์ฉํด๋ ํน์ ํจ์๋ฅผ ๊ฐ์ ๋ก inlineํ ์ํฌ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- ํจ์ ๋๋ ํธ์ถ๋์์ด /Ob0(๋๋ฒ๊ทธ ๋น๋ ๊ธฐ๋ณธ๊ฐ) ์ปดํ์ผ ์ต์ ์ผ๋ก ์ปดํ์ผ๋ ๊ฒฝ์ฐ - ํจ์ ๋๋ ํธ์ถ๋์์ด ์๋ก ๋ค๋ฅธ ํ์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ (์ : ํ์ชฝ์ C++ ์์ธ์ฒ๋ฆฌ, ๋ค๋ฅธ ์ชฝ์ ๊ตฌ์กฐํ๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ) - ํจ์๊ฐ ๊ฐ๋ณ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ - ํจ์๊ฐ /Og, /Ox, /O1 ๋๋ /O2๋ฅผ ์ฐ์ง ์๊ณ ์ธ๋ผ์ธ ์ด์ ๋ธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ - ํจ์๊ฐ ์ฌ๊ท์ ์ด๊ณ #pragma inline_recursion(on)์ ํ์ง ์์ ๊ฒฝ์ฐ. Pragma ์ฌ๊ทํจ์๋ ์ด 16๋ฒ์ ๊น์ด๋ก ์ธ๋ผ์ธ ํ๋ค. ๊น์ด๋ฅผ ์กฐ์ ํ๋ ค๋ฉด #pragma inline_depth๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. - ํจ์๊ฐ virtual์ด๊ณ ๊ฐ์์ ์ผ๋ก ํธ์ถ๋๋ ๊ฒฝ์ฐ, ๊ฐ์ํจ์์ ์ง์ ํธ์ถ์ ์ธ๋ผ์ธ ๊ฐ๋ฅ. - ํ๋ก๊ทธ๋จ์์ ํด๋น ํจ์์ ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ ํจ์ ํฌ์ธํฐ๋ก ํธ์ถ๋ ๊ฒฝ์ฐ. ์ฃผ์๊ฐ ์์๋ ํด๋น ํจ์์ ๋ํ ์ง์ ํธ์ถ์ ๊ฒฝ์ฐ ์ธ๋ผ์ธ ๊ฐ๋ฅ. - naked_declspec๋ก ์์๋ ํจ์์ ๊ฒฝ์ฐ. |
2. ์ฐธ๊ณ ๋ฐ ์ถ์ฒ
๋ฐฐ๊ณ ํ์ ๊น๋จน๊ณ ๋ง๋ ๋ธ๋ก๊ทธ
https://wonjayk.tistory.com/204
์ค์ด๋ฐ๋ ๋ธ๋ก๊ทธ
https://hmjo.tistory.com/120
์ฝ๋ฉ ๋์ฅ
https://dojang.io/mod/page/view.php?id=748
'Language > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] keyword: static (0) | 2020.07.23 |
---|---|
[C++] keyword: explicit (0) | 2020.07.22 |
[C++] keyword: const (0) | 2020.07.22 |
[C++11] keyword: final (0) | 2020.07.22 |
[C++11] keyword: override (0) | 2020.07.22 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[C++] keyword: static
[C++] keyword: static
2020.07.23 -
[C++] keyword: explicit
[C++] keyword: explicit
2020.07.22 -
[C++] keyword: const
[C++] keyword: const
2020.07.22 -
[C++11] keyword: final
[C++11] keyword: final
2020.07.22