7. [C์–ธ์–ด] ๊ตฌ์กฐ์ฒด์™€ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”

2019. 5. 16. 03:22ใ†PROGRAMMING/C & C++

 

 

1. ๊ตฌ์กฐ์ฒด

 

๊ตฌ์กฐ์ฒด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž๋ฃŒํ˜•๋“ค์„ ๋ฌถ์–ด์„œ

์ƒˆ๋กœ์šด ์ž๋ฃŒํ˜•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ฆ‰, ์‚ฌ์šฉ์ž ์ •์˜ ์ž๋ฃŒํ˜•์ด์ฃ .

 

๊ตฌ์กฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

struct ํ‚ค์›Œ๋“œ ์ดํ›„ ์ค‘๊ด„ํ˜ธ ์•ˆ์— ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๋“ค์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

typedef ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋„ ์ด๋ฆ„์„ ๋‹ค์‹œ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ตฌ์กฐ์ฒด์˜ ์„ ์–ธ์€ ์ด๋Ÿฐ ์‹์œผ๋กœ ์•„์ฃผ ์†์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ดˆ๊ธฐํ™”ํ™”๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ ํ•  ๋•Œ ํ•ด๋„ ๋ฌด๋ฐฉํ•˜๊ณ ,

๋ณ€์ˆ˜ ์„ ์–ธ ์ดํ›„ ๋”ฐ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด๋„ ์ƒ๊ด€์ด ์—†์Šต๋‹ˆ๋‹ค.

๋ฉค๋ฒ„์— ๋Œ€ํ•œ ์ ‘๊ทผ์€ '.' ์„ ํ†ตํ•ด์„œ ํ•  ์ˆ˜ ์žˆ๊ณ , ํฌ์ธํ„ฐ ์‚ฌ์šฉ ์‹œ์—๋Š” '->' ๋ฅผํ†ตํ•ด์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์œผ๋‹ˆ

์ด์ œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ธ ๊ตฌ์กฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 


 

 

2. ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” (Memory Fragment)

 

๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋ž€

RAM์—์„œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ณต๊ฐ„์ด ์ž‘์€ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ

๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํžˆ ์กด์žฌํ•˜์ง€๋งŒ, ํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ๋‚ด RAM์€ ์—ฌ์œ  ๊ณต๊ฐ„์€ ์ˆ˜์น˜์ƒ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ๋‚˜์˜ค๋Š”๋ฐ, ์ด ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ง์ž…๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค๋ฉด, PC์— RAM์ด 8GB๊ฐ€ ์žฅ์ฐฉ๋˜์–ด์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ์‹œ๋‹ค.

๊ฒŒ์ž„์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ RAM์ด 4GB, ๋ฉœ๋ก ์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ 4GB๊ฐ€ ์†Œ๋ชจ๋œ๋‹ค๊ณ  ํ•  ๋•Œ,

๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด 2๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋™์‹œ์— ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”์—๋Š” 

๋‚ด๋ถ€ ๋‹จํŽธํ™”(Internal Fragmentation),

์™ธ๋ถ€ ๋‹จํŽธํ™”(External Fragmentation)

๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‚ด๋ถ€ ๋‹จํŽธํ™”๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ๋•Œ,

ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ์–‘ ๋ณด๋‹ค ๋” ํฐ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜์–ด์„œ

ํ”„๋กœ์„ธ์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋‚ญ๋น„๋˜๋Š” ์ƒํ™ฉ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ๊ฒŒ์ž„์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ 4GB๋งŒ ํ•„์š”ํ•œ๋ฐ, ์ด ์ด์ƒ์œผ๋กœ ํ• ๋‹น๋˜๋Š” ์ƒํ™ฉ์„ ๋งํ•˜์ฃ .

 

 

์™ธ๋ถ€ ๋‹จํŽธํ™”๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ํ•ด์ œ๋˜๋Š” ์ž‘์—…์ด ๋ฐ˜๋ณต๋  ๋•Œ,

์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ค‘๊ฐ„์ค‘๊ฐ„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ, ์ค‘๊ฐ„์ค‘๊ฐ„์— ์ƒ๊ธด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋งŽ์ด ์กด์žฌํ•˜์—ฌ

์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ํ• ๋‹นํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด, RAM์„ 2GB ์ •๋„ ์†Œ๋ชจํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ํ• ๋‹นํ•˜๊ณ ,

๋ฐ”๋กœ ์ด์–ด์„œ 4GB์งœ๋ฆฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

2GB์งœ๋ฆฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๋ฉด, ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฒ˜์Œ ์ฃผ์†Œ๋ถ€ํ„ฐ 2GB๋งŒํผ์˜ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ๋นˆ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์Œ“์ด๋Š” ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜๊ฒŒ ๋˜๋ฉด์„œ

์—ฌ์œ  ๊ณต๊ฐ„์€ ์ˆ˜์น˜์ƒ์œผ๋กœ 4GB๊ฐ€ ์žˆ๋Š”๋ฐ,

3GB์งœ๋ฆฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•  ๋•Œ, ๋งˆ๋•…ํ•œ ๊ณต๊ฐ„์ด ์—†์–ด์ง€๊ฒŒ ๋  ๋•Œ 

์™ธ๋ถ€ ๋‹จํŽธํ™”๊ฐ€ ์ƒ๊ฒผ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•  ๋•Œ

์กฐ์‹ฌํ•ด์•ผ ํ•  ๋ถ€๋ถ„์€ ๋ฐ”๋กœ ๋‚ด๋ถ€ ๋‹จํŽธํ™”์ž…๋‹ˆ๋‹ค.

 

 


 

 

3. ๊ตฌ์กฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”

 

"32๋น„ํŠธ ํ™˜๊ฒฝ์—์„œ ๊ตฌ์กฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฒ˜๋ฆฌ ๋‹จ์œ„๋Š” 4๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค.

๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ„(๊ธฐ๋ณธ ์ž๋ฃŒํ˜•) ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ๋ฉค๋ฒ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค."

์ด ๋ง์ด ๋ฌด์Šจ ๋ง์ธ์ง€ ํ•œ ๋ฒˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์œ„์—์„œ ์ •์˜ํ•œ ๊ตฌ์กฐ์ฒด๋Š” ๋ช‡ ๋ฐ”์ดํŠธ์ผ๊นŒ์š”?

int ์ž๋ฃŒํ˜• 4๋ฐ”์ดํŠธ

short ์ž๋ฃŒํ˜• 2๋ฐ”์ดํŠธ

char ์ž๋ฃŒํ˜• 1๋ฐ”์ดํŠธ

double ์ž๋ฃŒํ˜• 8๋ฐ”์ดํŠธ

์ด ํ•ฉ 15๋ฐ”์ดํŠธ๊ฐ€ ๋‚˜์˜ค๋„ค์š”.

๊ณผ์—ฐ ์ •๋ง 15๋ฐ”์ดํŠธ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ sizoef ์—ฐ์‚ฐ์œผ๋กœ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

ํ™•์ธ ๊ฒฐ๊ณผ 16๋ฐ”์ดํŠธ๋ผ๋Š” ๊ฐ’์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

์–ด์งธ์„œ ์ด๋Ÿฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋Š”์ง€ ํ•œ ๋ฒˆ ๋ถ„์„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

"32๋น„ํŠธ ํ™˜๊ฒฝ์—์„œ ๊ตฌ์กฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฒ˜๋ฆฌ ๋‹จ์œ„๋Š” 4๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค.

๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ„(๊ธฐ๋ณธ ์ž๋ฃŒํ˜•) ์ค‘์—์„œ๊ฐ€์žฅ ํฐ ๋ฉค๋ฒ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค."

 

์šฐ์„ , ์šฐ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ ๊ตฌ์กฐ์ฒด ์•ˆ์—์„œ ๊ฐ€์žฅ ํฐ ๋ฉค๋ฒ„๋Š” double์ž๋ฃŒํ˜•์ž…๋‹ˆ๋‹ค.

double ์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ๋Š” 8๋ฐ”์ดํŠธ์ด๋ฏ€๋กœ 8๋ฐ”์ดํŠธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ฒ˜๋ฆฌ ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐ์ฒด์— ์ •์˜๋œ ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น์„ ํ•ด๋ณด๋ฉด

๋งจ ๋จผ์ € int ์ž๋ฃŒํ˜•์„ ์„ ์–ธํ–ˆ์œผ๋ฏ€๋กœ, 4๋ฐ”์ดํŠธ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ฒซ 8๋ฐ”์ดํŠธ ์ค‘์— 4๋ฐ”์ดํŠธ๋ฅผ ์†Œ๋น„ํ•˜๊ฒŒ ๋˜์ฃ .

์ดํ›„ ๋‚˜๋จธ์ง€ ๊ณต๊ฐ„์— ๊ฐ๊ฐ ์ˆœ์„œ๋Œ€๋กœ short(2๋ฐ”์ดํŠธ), char(1๋ฐ”์ดํŠธ) ์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ๋งŒํผ ํ• ๋‹น์ด ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋‚จ์€ 1๋ฐ”์ดํŠธ์— doubleํ˜•์„ ํ• ๋‹นํ•  ์ˆ˜ ์—†์œผ๋‹ˆ, ์ƒˆ๋กœ์šด 8๋ฐ”์ดํŠธ ๊ณต๊ฐ„์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜์ฃ .

 

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด์„œ 15๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹Œ 16๋ฐ”์ดํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์šฐ๋ฆฌ๋Š” 1๋ฐ”์ดํŠธ์˜ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์ฃ .

 

๊ทธ๋Ÿผ ์ด๋ฒˆ์—๋Š” ๋งจ ๋งˆ์ง€๋ง‰์— ์žˆ๋Š” double ์ž๋ฃŒํ˜•๊ณผ char ์ž๋ฃŒํ˜•์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ถ„๋ช… ๊ฐ™์€ ์ž๋ฃŒํ˜•์ธ๋ฐ 8๋ฐ”์ดํŠธ๋‚˜ ๋” ํฐ 24๋ฐ”์ดํŠธ๋ผ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

 

๋‹ค์‹œ ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•ด ๋ณด๋ฉด

์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋กœ ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง„ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๋„๋ก

์ตœ๋Œ€ํ•œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ์ˆœ์„œ๋„ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.