๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ
stack ์์ญ
- ํ๋ก๊ทธ๋จ์ด ์๋์ผ๋ก ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
- ํจ์ํธ์ถ๊ณผ ๊ด๊ณ๋๋ ์ง์ญ๋ณ์์ ๋งค๊ฐ๋ณ์๊ฐ ์ ์ฅ๋๋ค.
- ํจ์ ํธ์ถ ์ ์์ฑ๋๋ฉฐ, ํจ์๊ฐ ๋๋๋ฉด ๋ฐํ๋๋ค.
- stack ์ฌ์ด์ฆ๋ ๊ฐ ํ๋ก์ธ์ค๋ง๋ค ํ ๋น๋์ง๋ง ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋ stack ์ฌ์ด์ฆ๊ฐ ๊ณ ์ ๋์ด ์์ด ๋ฐํ์ ์ stack ์ฌ์ด์ฆ๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
- ๋ช ๋ น ์คํ ์ ์๋์ผ๋ก ์ฆ๊ฐ or ๊ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ณดํต ๋ฉ๋ชจ๋ฆฌ์ ๋ง์ง๋ง ๋ฒ์ง๋ฅผ ์ง์ ํ๋ค.
heap ์์ญ
- ํ์์ ์ํด ๋์ ์ผ๋ก ํ ๋นํ ๋ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
- C์์ malloc(), calloc() ๋ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ํ ๋นํ ์ ์๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ฐ์ ์ํด์๋ง ์ฐธ์กฐ๋๋ ์์ญ์ด๋ค.
- stack์์ญ๊ณผ heap์์ญ์ ์ฌ์ค ๊ฐ์ ๊ณต๊ฐ์ ๊ณต์ ํ๋ค.
- heap์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ฎ์ ์ฃผ์๋ถํฐ ํ ๋น๋๋ฉด stack์ ๋์ ์ฃผ์๋ถํฐ ํ ๋น๋๋ ์์ด๋ค.
- ๊ทธ๋์ ๊ฐ ์์ญ์ด ์๋๊ณต๊ฐ์ ์นจ๋ฒํ ์ ์๋๋ฐ ์ด๋ฅผ ๊ฐ stack overflow, heap overflow๋ผ ํ๋ค.
Data ์์ญ (BSS, GVAR)
- ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ์์ฑ๋๊ณ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ฉด ์์คํ ์ ๋ฐํ๋๋ค.
- ์ ์ญ๋ณ์, ์ ์ ๋ณ์, ๋ฐฐ์ด, ๊ตฌ์กฐ์ฒด ๋ฑ์ด ์ ์ฅ๋๋ค.
- GVAR์ ์ด๊ธฐ๊ฐ์ 0์ด์๋ ํน์ ํ ๊ฐ์ผ๋ก ์ง์ ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
- ์ด๊ธฐํ๋ ๋ฐ์ดํฐ๋ Data์์ญ์, ์ด๊ธฐํ๋์ง ์์ ๋ฐ์ดํฐ๋ BSS ์์ญ์ ์ ์ฅ๋๋ค.
Text (Code) ์์ญ
- ํ ์คํธ ์์ญ์ ์คํ ๋ช ๋ น์ ํฌํจํ๋ ์ฝ๋๋ค์ด ๋ค์ด๊ฐ๋ ๋ถ๋ถ์ด๋ค.
- ํ๋ก๊ทธ๋จ์ ์์ ํ ๋ ์ปดํ์ผํ ํ๋ก๊ทธ๋จ(๊ธฐ๊ณ์ด)์ด ์ ์ฅ๋์ด ์๊ณ , ์ฝ๊ธฐ ์ ์ฉ ์์ญ์ด๊ธฐ์ ํ๋ก์ธ์ค๊ฐ ํจ๋ถ๋ก ๋ณ๊ฒฝ ํ ์ ์๊ณ ๋ณ๊ฒฝ ์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ๋ค.
- ์ฝ๋ ์์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก Hex ํ์ผ์ด๋ Bin ํ์ผ ๋ฉ๋ชจ๋ฆฌ์ด๋ค. ํ๋ก๊ทธ๋จ ๋ช ๋ น์ด ์์นํ๋ ๊ณณ์ผ๋ก ๊ธฐ๊ณ์ด๋ก ์ ์ด๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
iOS์์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฐฉ๋ฒ, ARC
ARC ์๋ ์ฐธ์กฐ ์นด์ดํ
- ์ค์ํํธ๋ ARC๋ฅผ ์ฌ์ฉํด์ ์ฑ ๋ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ถ์ ํ๊ณ ๊ด๋ฆฌํ๋ค.
- ๋๋ถ๋ถ์ ์ํฉ์์ swift ๋ด์์ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- Reference Counting์ ํด๋์ค ์ธ์คํด์ค์์๋ง ์ ์ฉ๋๋ค.
- ๊ตฌ์กฐ์ฒด๋ ์ด๊ฑฐํ์ ๊ฐํ์ ์ด๋ฉฐ ARC์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
์ด๋ป๊ฒ ARC๊ฐ ์๋ํ ๊น?
- ๋งค๋ฒ ์๋ก์ด Class ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋๋ง๋ค, ARC๋ ์ธ์คํด์ค ์ ๋ณด๋ฅผ ์ ์ฌํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ์ ๋ฉ์ด๋ฆฌ๋ฅผ ํ ๋นํ๋ค.
- ์ด ๋ฉ๋ชจ๋ฆฌ๋ ์ธ์คํด์ค ํ์ ์ ๋ํ ์ ๋ณด๋ฅผ ํด๋น ์ธ์คํด์ค์ ๊ด๋ จ๋์ด ์ ์ฅ๋ ํ๋กํผํฐ๋ค์ ๊ฐ์ ํจ๊ป ํฌํจํ์ฌ ์ ์งํ๋ค.
- ์ถ๊ฐ์ ์ผ๋ก, ์ธ์คํด์ค๊ฐ ๋์ด์ ํ์ํ์ง ์๊ฒ ๋ ๋, ARC๋ ํด๋น ์ธ์คํด์ค์ ์ํด ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ณ , ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค๋ฅธ ๋ชฉ์ ์ ์ํด ์ฌ์ฉ๋ ์ ์๊ฒ ๋๋ค.
- ๋ง์ฝ ARC๊ฐ ์ฌ์ ํ ์ฌ์ฉ์ค์ธ ํด๋์ค ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ฒ ๋๋ค๋ฉด, ํด๋น ์ธ์คํด์ค์ ํ๋กํผํฐ๋ค์ ๋์ด์ ์ ๊ทผํ์ง ๋ชปํ๊ฒ ๋๊ฑฐ๋, ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ํธ์ถํ์ง ๋ชปํ ์ ๋ ์๋ค.
- ํ์ํ ์ธ์คํด์ค๋ค์ด ์ฌ๋ผ์ง์ง ์๋๋ก ๋ณด์ฅํ๊ธฐ ์ํด์ ARC๋ ํ์ฌ ๊ฐ๊ฐ์ ์ธ์คํด์ค๋ค์ ๋ํด ์ผ๋ง๋ ๋ง์ ํ๋กํผํฐ, ์์, ๋ณ์๋ค์ด ์ฐธ์กฐํ๊ณ ์๋์ง ์ถ์ ํ๋ค.
- ARC๋ ์ธ์คํด์ค๋ค์ด ์ฌ์ ํ ์กด์ฌํ ์ ์๋๋ก, ์ต์ 1๊ฐ์ ํ์ฑ ์ฐธ์กฐ๊ฐ ์๋ ํ ์ธ์คํด์ค๋ฅผ ํด์ ํ์ง ์๋๋ค.
- ํด๋์ค ์ธ์คํด์ค์ ํ๋กํผํฐ, ์์, ๋ณ์๋ฅผ ํ ๋นํ ๋๋ง๋ค, ์ด๋ฌํ ํ๋กํผํฐ, ์์, ๋ณ์๋ค์ ์ธ์คํด์ค์ strong ์ฐธ์กฐ๋ฅผ ์์ฑํ๋ค.
- strong ์ฐธ์กฐ๋ ์ธ์คํด์ค๋ฅผ ๊ฐํ๊ฒ ์ก๊ณ ์ ์งํ๋ฉฐ, ์ต์ 1๊ฐ ์ด์์ ์ฐธ์กฐ๊ฐ ๋จ์์๋ ํ ์ธ์คํด์ค๊ฐ ํด์ ๋๋ ๊ฒ์ ํ์ฉํ์ง์๋๋ค.
MRC
- ์๋์ผ๋ก RC(์ฐธ์กฐ ํ์)๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์
๋ฉ๋ชจ๋ฆฌ ๋จํธํ
๋ฉ๋ชจ๋ฆฌ ๋จํธํ
- ๋ฉ๋ชจ๋ฆฌ์ ๊ณต๊ฐ์ด ์์ ์กฐ๊ฐ์ผ๋ก ๋๋์ด์ ธ ์ฌ์ฉ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ์ง๋ง ํ ๋น์ด ๋ถ๊ฐ๋ฅํ ์ํ๋ฅผ ์๋ฏธํ๋ค.
๋ด๋ถ ๋จํธํ (Internal Fragmentation)
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ๋ ํ๋ก์ธ์ค๊ฐ ํ์ํ ์๋ณด๋ค ๋ ํฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ด์ ํ๋ก์ธ์ค์์ ๊ณต๊ฐ์ด ๋ญ๋น๋๋ ์ํฉ
์ธ๋ถ ๋จํธํ (External Fragmentation)
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๊ณ ํด์ ๋๋ ์์ ์ด ๋ฐ๋ณต๋ ๋ ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค๊ฐ์ค๊ฐ ์กด์ฌํ๊ฒ ๋๋ค. ์ด ๋ ์ค๊ฐ์ค๊ฐ์ ์๊ธด ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง์ด ์กด์ฌํด์ ์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ถฉ๋ถํ์ง๋ง ์ค์ ๋ก ํ ๋นํ ์ ์๋ ์ํฉ
๋ฉ๋ชจ๋ฆฌ ๋จํธํ ๋ฌธ์ ํด๊ฒฐ๋ฐฉ๋ฒ
- ํ์ด์ง(Paging)๊ธฐ๋ฒ
- ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ ๊ฒ์ ํ์ด์ง๋ผ ํ๊ณ , RAM์ ํ์ด์ง์ ๊ฐ์ ํฌ๊ธฐ๋ก ๋๋ ๊ฒ์ ํ๋ ์์ด๋ผ๊ณ ํ ๋, ์ฌ์ฉํ์ง ์๋ ํ๋ ์์ ํ์ด์ง์ ์ฎ๊ธฐ๊ณ , ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ด์ง ๋จ์๋ก ํ๋ ์์ ์ฎ๊ธฐ๋ ๊ธฐ๋ฒ
- ํ์ด์ง์ ํ๋ ์์ ๋์์ํค๊ธฐ ์ํด page mapping๊ณผ์ ์ด ํ์ํด์ paging table์ ๋ง๋ ๋ค.
- ํ์ด์ง ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฐ์์ ์ด์ง ์์ ๊ณต๊ฐ๋ ํ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ถ ๋จํธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์๋ค.
- ๋ด๋ถ ๋จํธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒฝ์ฐ ์คํ๋ ค ํจ์จ์ด ๋จ์ด์ง ์๋ ์๋ค.
- ์ธ๊ทธ๋ฉํ
์ด์
(Segmentation)๊ธฐ๋ฒ
- ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ก ํฌ๊ธฐ๊ฐ ๋ค๋ฅธ ๋ ผ๋ฆฌ์ ๋จ์์ธ ์ธ๊ทธ๋จผํธ๋ก ๋ถํ ํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค.
- ๊ฐ ์ธ๊ทธ๋จผํธ๋ ์ฐ์์ ์ธ ๊ณต๊ฐ์ ์ ์ฅ๋์ด ์๋ค.
- ํ๋ก์ธ์ค๊ฐ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋งํผ ํ ๋นํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ ๋จํธํ๋ ์ผ์ด๋์ง ์์ผ๋ ์ฌ์ ํ ์ค๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ฉด ์๊ธฐ๋ ๊ตฌ๋ฉ, ์ธ๋ถ ๋จํธํ ๋ฌธ์ ๋ ์ฌ์ ํ ์กด์ฌํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํ(Memory Pool)
- ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์ํ ํฌ๊ธฐ, ๊ฐ์ ๋งํผ ์ฌ์ฉ์๊ฐ ์ง์ ์ง์ ํ์ฌ ๋ฏธ๋ฆฌ ํ ๋น๋ฐ์ ๋๊ณ ํ์ํ ๋๋ง๋ค ์ฌ์ฉํ๊ณ ๋ฐ๋ฉํ๋ ๊ธฐ๋ฒ
- ๋ฏธ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด๋๊ณ ๊ฐ์ ธ๋ค ์ฐ๊ณ ๋ฐ๋ฉํ๋ฏ๋ก ํ ๋น๊ณผ ํด์ ๋ก ์ธํ ์ธ๋ถ ๋จํธํ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
- ํ์ํ ํฌ๊ธฐ๋งํผ ํ ๋นํ๋๊น ๋ด๋ถ ๋จํธํ ๋ํ ์๊ธฐ์ง ์๋๋ค.
- ๋ฏธ๋ฆฌ ํ ๋นํด๋๊ณ ์ฌ์ฉํ์ง ์๋ ์๊ฐ์๋ ๊ณ์ ํ ๋นํ๋๊น ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๋ค.
๋ฐ์ํ
'๐ป CS > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํ(Heap) ๊ตฌํํด๋ณด๊ธฐ (0) | 2023.04.11 |
---|---|
[Swift] ๊ทธ๋ํ(Graph) (0) | 2023.03.29 |
[Swift] ๋ฑ ๊ตฌํํด๋ณด๊ธฐ (0) | 2023.03.29 |
[Swift] ์คํ ๊ตฌํํด๋ณด๊ธฐ (0) | 2023.03.29 |
[Swift] ํ(Queue) ๊ตฌํํ๊ธฐ (0) | 2023.03.24 |