๊ธ€ ์ž‘์„ฑ์ž: ๋˜ฅํด๋ฒ .
๋ฐ˜์‘ํ˜•

1. ์„ค๋ช…


1.1) inline

 inline ํ‚ค์›Œ๋“œ๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹  ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ณณ๋งˆ๋‹ค ํ•จ์ˆ˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ด ๋„ฃ์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 ๊ทธ๋ ‡๋‹ค๋ฉด ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ๋ญ˜๊นŒ? ์‹ค์ œ๋กœ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ณผ์ •์„ ์š”์•ฝํ•˜๋ฉด

1. ํ•จ์ˆ˜์˜ ์ธ์ž๋ฅผ ์Šคํƒ์— ์ €์žฅ
2. ํ•จ์ˆ˜๊ฐ€ ๋ฆฌํ„ด๋  ๋•Œ ๋Œ์•„์˜ฌ ์ฃผ์†Œ๋ฅผ ์Šคํƒ์ด๋‚˜ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ

3. ํ•จ์ˆ˜์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋กœ ์ ํ”„

4. ํ•จ์ˆ˜์˜ ์ฝ”๋“œ ์‹คํ–‰

5. ํ•จ์ˆ˜์—์„œ ๋งŒ๋“ค์–ด์ง„ ์ง€์—ญ๋ณ€์ˆ˜, ์Šคํƒ์— ์ €์žฅ๋œ ์ธ์ž ํ•ด์ œ, ๋ฆฌํ„ด ๊ฐ’์„ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ

6. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ์ €์žฅํ•ด๋‘” ์ฃผ์†Œ๋กœ ๋˜๋Œ์•„๊ฐ

์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š”๋ฐ ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ €๋Ÿฐ ๋ช…๋ น์–ด๋“ค์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋  ์ˆ˜๋ฐ–์— ์—†๋‹ค. ์ด๋Ÿฐ ์˜ค๋ฒ„ ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด C++์—์„œ๋Š” inline์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

 

[๊ทธ๋ฆผ 1. ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ์ธ๋ผ์ธ ํ•จ์ˆ˜์˜ ์ฐจ์ด]

 

 ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ณผ์ • ์—†์ด ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์ œํ•˜์—ฌ ๋„ฃ์–ด์ฃผ๋ฏ€๋กœ ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๋‹ค. ๋‹จ, ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์ œํ•œ ๋งŒํผ ์‹คํ–‰ ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

 

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