[C++] placement new

C++๋กœ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๋‹ค๋ณด๋ฉด new๋ฅผ ์‚ฌ์šฉํ•œ ๋™์ ํ• ๋‹น์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋™์ ํ• ๋‹น์€ ์ƒ๊ฐ๋ณด๋‹ค ๋น„์‹ผ ๋…€์„์ด๋‹ค.
๋‹จ์ˆœํžˆ ์—ญ์ฐธ์กฐ๋งŒ ํ•˜๋Š”๊ฑด ๊ทธ๋ ‡๊ฒŒ ๋ฌด๊ฒ์ง€ ์•Š์ง€๋งŒ, ํ• ๋‹นํ•˜๊ณ  ์ง€์šฐ๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ์ข€ ๋ฌด๊ฑฐ์šด ํŽธ์ด๋‹ค

ํž™ ๊ด€๋ฆฌ๊ฐ™์€๊ฑด ๊ธฐ๋ณธ์ ์œผ๋กœ OS๋‹จ์—์„œ ํ•˜๊ธฐ๋•Œ๋ฌธ์— OS์— ์š”์ฒญ์„ ๋‚ ๋ฆฌ๋Š” ํ˜•ํƒœ๋กœ ๋™์ž‘ํ•˜๋Š”๋ฐ, ์ด๊ฑธ ํ•จ์ˆ˜ํ™”๋œ๊ฑธ ์จ์„œ ๊ทธ๋ ‡์ง€ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋กœ๋Š” ๋ณดํ†ต ์ˆ˜๋ฐฑ์ค„์ด ๋„˜์–ด๊ฐ„๋‹ค.

์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ๊ทธ๋งŒํผ์˜ ๋‚ญ๋น„๋„ ๊ทน๋‹จ์ ์œผ๋กœ ์ค„์ด๊ณ  ์‹ถ๋‹ค๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
placement new๋ผ ๋ถˆ๋ฆฌ๋Š” new์˜ ํŠน์ˆ˜๊ตฌ๋ฌธ์ด๋‹ค.

๋ฏธ๋ฆฌ ์šฐ๋ฆฌ๋งŒ์˜ ์ปค์Šคํ…€ ํž™ ๊ณต๊ฐ„์„ ๋งŒ๋“ค๊ณ , ๊ฑฐ๊ธฐ์— ํ• ๋‹น์„ ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‹œํ€€์Šค๋ฅผ ์˜ˆ์•ฝํ•˜๊ณ , ๊ทธ ์ฃผ์†Œ๋ฅผ new์˜ ์ธ์ง€๋กœ ๋„˜๊ธฐ๋ฉด ๋œ๋‹ค.

์ด ๋ฉ”๋ชจ๋ฆฌ ์‹œํ€€์Šค์—๋Š” ๋ณ„๋‹ค๋ฅธ ์ œ์•ฝ์€ ์—†๋Š”๋“ฏํ•˜๋‹ค. ์“ฐ๊ธฐ๋งŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋˜๊ธฐ๋•Œ๋ฌธ์— ์œ„์ฒ˜๋Ÿผ ์ •์ ๋ฐฐ์—ด์ด์–ด๋„ ๋˜๊ณ , ๋™์ ํ• ๋‹น์„ ํ•ด๋„ ๋˜๊ณ 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ•์ œ๋กœ ์ ‘๊ทผํ•ด์„œ ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ํ‘๋งˆ๋ฒ•๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.



์ฃผ์†Œ ๊ด€๋ฆฌ

๊ทผ๋ฐ ์ด๊ฒƒ๋„ ์ œ๋Œ€๋กœ ์“ฐ๋ ค๋ฉด ๊ณ ๋ คํ• ๊ฒŒ ๋งŽ๋‹ค.
๊ทธ๋ƒฅ pool ์ฃผ์†Œ๋งŒ ๋ฌด์ž‘์ • ๋„ฃ์œผ๋ฉด ๊ทธ ์‹œ์ž‘์ฃผ์†Œ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ ๋•Œ๋ฌธ์—, ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ• ๋•Œ๋งˆ๋‹ค ์ฃผ์†Œ ๋ฒ”์œ„๋ฅผ ๊ด€๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.

๋ถˆํŽธํ•˜๋‹ค.



alignment

ํ•˜์ง€๋งŒ ์ € ์ฃผ์†Œ๊ด€๋ฆฌ๋ฒ•์—๋„ ์•ฝ๊ฐ„ ๋ฏธ์ง„ํ•œ ๋ถ€๋ถ„์ด ์กด์žฌํ•œ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ์ •๋ ฌ(memory alignment)๋ผ๊ณ  ๋“ค์–ด๋ดค๋Š”๊ฐ€? ์ด๊ฑด cpu์˜ ๋™์ž‘ ํšจ์œจ์„ฑ์— ๊ด€ํ•œ ๋ฌธ์ œ์ธ๋ฐ,
๋งŒ์•ฝ 2๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ์™€ 1๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ทธ 2๊ฐœ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ 3๋ฐ”์ดํŠธ๋กœ ์Œ“๊ธฐ๋ณด๋‹จ cpu์˜ ์ฒ˜๋ฆฌ๋‹จ์œ„๋กœ ์ž˜๋ผ์ฃผ๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ cpu์˜ ์ฒ˜๋ฆฌ๋‹จ์œ„๊ฐ€ 4๋ฐ”์ดํŠธ๋ผ๋ฉด, ์ค‘๊ฐ„์— ์—ฌ๋ฐฑ์„ ๋„ฃ์–ด์„œ 2๋ฐ”์ดํŠธ(4๋ฐ”์ดํŠธ ์ฐจ์ง€), 1๋ฐ”์ดํŠธ(4๋ฐ”์ดํŠธ ์ฐจ์ง€)์˜ ํ˜•ํƒœ๋กœ 8๋ฐ”์ดํŠธ๋ฅผ ์ ์œ ํ•˜๊ฒŒ ํ•˜๋Š”๊ฒŒ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.

๋‹จ์ˆœํžˆ ์‚ฌ์ด์ฆˆ๋กœ๋งŒ ์ฃผ์†Œ๋ฅผ ๊ด€๋ฆฌํ•˜๋‹ˆ, 3๋ฐ”์ดํŠธ, 2๋ฐ”์ดํŠธ๋ฅผ ๋ฌด์ž‘์ • ์Œ“๊ณ ์žˆ์—ˆ๋‹ค.

์ด๋Ÿฐ๊ฑธ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด align์„ ๋‹ค ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ๋ง์ด๋‹ค.


๊ทผ๋ฐ ์ด ๊ธฐ๋Šฅ ์ž์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ผ์€ ๋งŽ์ง€ ์•Š์„๊ฒƒ์ด๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ €์ •๋„์˜ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•˜์ง€๋„ ์•Š๊ณ , ๊ด€๋ฆฌ๋‚œ์ด๋„๋งŒ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ์ƒ์Šนํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฆฌ์†Œ์Šค๊ฐ€ ๊ทน๋‹จ์ ์œผ๋กœ ์ œํ•œ๋ ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๊ธธ ๊ถŒํ•œ๋‹ค.



์ฐธ์กฐ
https://woo-dev.tistory.com/m/217
https://www.geeksforgeeks.org/placement-new-operator-cpp/