Bibi's DevLog ๐ค๐
Swift์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ (๊ธฐ์ด) ๋ณธ๋ฌธ
์ฐธ๊ณ ํ ๋ฌธ์
https://babbab2.tistory.com/25 (Swift)
http://www.tcpschool.com/c/c_memory_structure (์ปดํจํฐ ์ผ๋ฐ)
http://net-informations.com/faq/net/stack-heap.htm (์ปดํจํฐ ์ผ๋ฐ - ํ๊ณผ ์คํ ๋น๊ต)
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด, ์ด์์ฒด์ (OS)๋ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ํด๋น ํ๋ก๊ทธ๋จ์ ์ํด ์ ์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด ์ค๋ค.
์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ด 4๊ฐ์ง ์์ญ์ผ๋ก ๋๋์ด์ ธ ์๋ค - Code, Data, Heap, Stack
์ถ์ฒ : TCPSchool (http://www.tcpschool.com/c/c_memory_structure)
1. Code ์ฝ๋ ์์ญ
- ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์์ค ์ฝ๋๊ฐ ๊ธฐ๊ณ์ด ํํ๋ก ์ ์ฅ๋จ
- ์ปดํ์ผ ํ์์ ๊ฒฐ์ ๋จ
- Read-Only (์คํ ์ค ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ก)
- ํ ์คํธ ์์ญ์ด๋ผ๊ณ ๋ ๋ถ๋ฆ
2. Data ๋ฐ์ดํฐ ์์ญ
- ์ ์ญ๋ณ์(Global Variables), static๋ณ์(Type Property)๊ฐ ์ ์ฅ๋จ
- ํ๋ก๊ทธ๋จ์ด ์์๋ ๋ ํ ๋น๋๊ณ , ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋์ด์ผ ํด์ ๋จ
- ์ฆ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๊ธฐ ์ ๊น์ง ํด์ ๋์ง ์๋๋ค๋ ์๋ฏธ.
- Read-Write (์คํ ์ค ๋ณ์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก)
3. Heap ํ ์์ญ
- ํ๋ก๊ทธ๋๋จธ๊ฐ ํ ๋น/ํด์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ. (= ๋์ ํ ๋น)
- ์ฆ ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ด๋ฆฌํ ์ ์๊ณ , ๊ด๋ฆฌํด์ผ๋ง ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
- Swift์์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ํ ๋นํ๋ ๋์ , ์ฐธ์กฐ ํ์
๊ฐ๋ค์ด ํ์ ์๋ ํ ๋น๋๋ค.
- ์๋ฅผ ๋ค์ด ํด๋์ค ์ธ์คํด์ค, ํด๋ก์ ๋ฑ
- ๋ํ Swift์์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ํด์ ํ๋ ๋์ , ARC๋ฅผ ํตํด ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํด์ ํด ์ค๋ค.
- ์ฌ์ฉํ ๋ค์์๋ ๋ฐ๋์ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์(memory leak)๊ฐ ๋ฐ์ํ๋ค.
- ์ ์ผํ๊ฒ ๋ฐํ์์ ๊ฒฐ์ ๋๋ ์์ญ์ด๋ค.
- ๋ฐ๋ผ์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ํ์คํ์ง ์์ ๋ ์ฌ์ฉํ๋ค.
- ํฌ๊ธฐ๊ฐ ์ ๋์ ์ด๋ค. ํ์ง๋ง ๊ฐ์๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ์ ์ํด ํ ์์ญ์ ํฌ๊ธฐ๋ ์ ํ๋๊ธด ํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ๋ฎ์ ์ฃผ์ โ ๋์ ์ฃผ์ ๋ฐฉํฅ์ผ๋ก ํ ๋น๋๋ค.
- ํ ์์ญ์ ์์๋ค์ ์๋ก ์ด๋ค ์์กด์ฑ๋ ์์ผ๋ฉฐ, ์ธ์ ๋ ์์์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ์ธ์ ๋ ํ ๋น/ํด์ ๊ฐ ๊ฐ๋ฅํ๋ค. ์ด ๋๋ฌธ์ ํ ์์ญ์ ์ด๋ค ๋ถ๋ถ์ด ์ด๋ค ์์ ์ ํ ๋น/ํด์ ๋์๋์ง ์ถ์ ํ๋ ๊ฒ์ด ๋ณต์กํ๋ค.
4. Stack ์คํ ์์ญ
- ํ๋ก๊ทธ๋จ์ด ์๋์ผ๋ก ์ฌ์ฉํ๋ ์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- CPU์ ์ํด ๊ด๋ฆฌ ๋ฐ ์ต์ ํ๋๋ฏ๋ก ์ ๊ทผ์๋๊ฐ ํ๋ณด๋ค ๋น ๋ฅด๋ค
- ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ํ ๋น/ํด์ ํ์ง ์์๋ ๋๋ค
- ํจ์ ํธ์ถ ์ ํจ์์ ์ง์ญ๋ณ์, ํ๋ผ๋ฏธํฐ, ๋ฆฌํด๊ฐ ๋ฑ์ด ์ ์ฅ๋๋ค. ํจ์ ์ข ๋ฃ ์ ๊ด๋ จ ๋ฉ๋ชจ๋ฆฌ๋ ํด์ ๋๋ค.
- ํฌ๊ธฐ์ ์ ํ์ด ์๋ค. ์ปดํ์ผ ํ์์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ฏ๋ก ๋ฌดํํ ํ ๋นํ ์ ์๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ๋์ ์ฃผ์ โ ๋ฎ์ ์ฃผ์ ๋ฐฉํฅ์ผ๋ก ํ ๋น๋๋ค.
- ์๋ฃ๊ตฌ์กฐ์์ ๋ฐฐ์ฐ๋ ์คํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก LIFO (ํ์ ์ ์ถ)๋ก ๋์ํ๋ค.
ํ๊ณผ ์คํ ๋น๊ต
ํ | ์คํ |
---|---|
์ฐธ์กฐ ํ์ ์ด ์ ์ฅ๋จ (ํด๋์ค ์ธ์คํด์ค, ํด๋ก์ ๋ฑ) | ๊ฐ ํ์ ์ด ์ ์ฅ๋จ (ํจ์์ ์ง์ญ๋ณ์, ํ๋ผ๋ฏธํฐ, ๋ฆฌํด๊ฐ ๋ฑ) |
๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ํ ๊ณต๊ฐ | ์ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ํ ๊ณต๊ฐ |
์๋์ ์ผ๋ก ๋๋ฆผ | ์๋์ ์ผ๋ก ๋น ๋ฆ |
๋ฐํ์์ ๊ฒฐ์ | ์ปดํ์ผํ์์ ๊ฒฐ์ |
์๋์ ์ผ๋ก ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํด์ผ ํ ๋ | ์๋์ ์ผ๋ก ์ ์ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํด์ผ ํ ๋ |
๋ฐํ์์ ์ผ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ๋์ง ๋ชจ๋ฅผ ๋ | ์ปดํ์ผ ์ ์ ์ผ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํด์ผ ํ๋์ง ์๊ณ ์์ ๋ |
ํ๋ก๊ทธ๋จ๋ง๋ค ๋ ๋ฆฝ๋ ํ์ ๊ฐ์ง | ์ค๋ ๋๋ง๋ค ๋ ๋ฆฝ๋ ์คํ์ ๊ฐ์ง (ํ์ ๊ณต์ ํจ) |
ํ๋ก๊ทธ๋๋จธ๊ฐ ํ ๋น/ํด์ ๋ฅผ ๊ด๋ฆฌํจ, (Swift) ARC๋ก ๊ด๋ฆฌํจ | CPU๊ฐ ํ ๋น/ํด์ ๋ฅผ ๊ด๋ฆฌํจ |
(๋ฒ์ญ) ํ๊ณผ ์คํ์ ์ฐจ์ด์
Differences between Stack and Heap
์คํ๊ณผ ํ ๋ชจ๋ ์ปดํจํฐ์ RAM์ ์ ์ฅ๋๋ค.
๊ฐ ํ์ ์ ์คํ์, ์ฐธ์กฐ ํ์ ์ ํ์ ์ ์ฅ๋๋ค.
์คํ์ ์ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ฌ์ฉ๋๊ณ , ํ์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ฌ์ฉ๋๋ค.
์คํ
์คํ์ ํ ๋น๋ ๋ณ์๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ก ์ ์ฅ๋๋ฉฐ, ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ๊ฒ์ ๋งค์ฐ ๋น ๋ฆ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ปดํ์ผ ํ์์ ์ด๋ฃจ์ด์ง๋๋ค.
ํจ์๋ ๋ฉ์๋๊ฐ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ๊ณ ๋ ๋ค๋ฅธ ํจ์๋ฅผ ์ฐจ๋ก๋ก ํธ์ถํ๋ ๊ฒฝ์ฐ, ์ด ๋ชจ๋ ํจ์๋ค์ ์คํ์ ๋งจ ๋ง์ง๋ง ํจ์๊ฐ ๊ฐ์ ๋ฐํํ ๋๊น์ง ์ ์ง๋ ์ฑ๋ก ๋จ์ ์์ต๋๋ค. ์คํ์ ํญ์ LIFO ์์๋ก ์์ฝ๋๋ฉฐ, ๊ฐ์ฅ ์ต๊ทผ์ ์์ฝ๋ ์์ญ์ด ํญ์ ๋ค์์ผ๋ก ํด์ ๋ ์์ญ์ด ๋ฉ๋๋ค. ์ด๊ฒ์ ์คํ์ ์ถ์ ํ๋ ๊ฒ์ ๊ต์ฅํ ๊ฐ๋จํ๊ฒ ๋ง๋ค์ด ์ฃผ๋ฉฐ, ์คํ์ผ๋ก๋ถํฐ ์ด๋ค ์์ญ์ ํด์ ํ๋ ๊ฒ์ ํฌ์ธํฐ ํ๋๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ผ ๋ฟ์ ๋๋ค.
ํ
ํ์ ํ ๋น๋ ๋ณ์๋ค์ ๋ฐํ์(์คํ ์๊ฐ)์ ์์ ๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ผ๋ฉฐ, ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ๊ฒ์ ์กฐ๊ธ ๋ ๋๋ฆฝ๋๋ค. ํ์ง๋ง ํ ์์ญ์ ํฌ๊ธฐ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ์ ์ํด ์ ํ๋ฉ๋๋ค. ํ์ ์์๋ ๋ค๋ฅธ ์์๋ค๊ณผ ์๋ก ์ด๋ ํ ์์กด์ฑ๋ ๊ฐ์ง ์์ผ๋ฉฐ, ์ธ์ ๋ ์์์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ธ์ ๋ ์์ญ์ ํ ๋นํ๊ณ ํด์ ํ ์ ์์ต๋๋ค. ์ด๋ ํ์ ์ด๋ค ๋ถ๋ถ์ด ์ด๋ค ์์ ์ ํ ๋น๋์ด ์๋์ง ํน์ ํด์ ๋์ด ์๋์ง ์ถ์ ํ๋ ๊ฒ์ ๋์ฑ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค.
๋น์ ์ด ์ปดํ์ผ ํ์ ์ ์ ์ ํํ ์ผ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํด์ผ ํ๋์ง ์๊ณ ์์ ๋, ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ๋๋ฌด ํฌ์ง ์์ ๋ ์คํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋น์ ์ด ์คํ ์์ ์ ์ ํํ ์ผ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ๋์ง ๋ชจ๋ฅด๊ฑฐ๋, ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํด์ผ ํ ๋ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฉํฐ์ค๋ ๋ ์ํฉ์์, ๊ฐ ์ค๋ ๋๋ ์์ ๋ง์ ์์ ํ ๋ ๋ฆฝ๋ ์คํ์ ๊ฐ์ง์ง๋ง ์คํ์ ๊ณต์ ํ๊ฒ ๋ฉ๋๋ค. ์คํ์ ์ค๋ ๋์ ๋ฐ๋ผ ๋ค๋ฅด๊ณ , ํ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์คํ์ ์์ธ ์ฒ๋ฆฌ ๊ทธ๋ฆฌ๊ณ ์ค๋ ๋ ์คํ์ ์์ด ์ค์ํ๊ฒ ๊ณ ๋ ค๋์ด์ผ ํฉ๋๋ค.