๐๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
- ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์์ ์คํ ์ค์ ์ฌ์ฉํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ๋ ๊ฒ์ ์๋ฏธ
- ์ ์ ํ ๋น : ์ปดํ์ผ์์ ์ ์์ค ์ฝ๋๋ฅผ ์ฝ๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๋ ๊ฒ
- ๋์ ํ ๋น : ์ปดํ์ผ ์์ ์ด ์๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ์ค์ธ ๋ฐํ์์ ํ์ํ ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๐ก๋์ ํ ๋น์ ํ๋ ์ด์ ?
- char name [100];
- name ๋ฐฐ์ด์ ์ต๋ 100๊ฐ ๊น์ง ์ ์ฅ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ ํ๋ก๊ทธ๋จ์ ์คํ ์์ผ์ 10๊ธ์๋ง ์ ๋ ฅํ๋ค. ๊ทธ๋ ๋ค๋ฉด 90๋ฐ์ดํธ๋ ์ด๋ป๊ฒ ๋ ? ๊ทธ๋ฅ ๋ญ๋น๊ฐ ๋๋๊ฒ์ด๋ค. ๋ฐ๋๋ก 100๊ธ์๋ฅผ ์ ์ฅํ ์ ์๋๋ฐ 110๊ธ์๋ฅผ ์ ๋ ฅํ๋ ค๊ณ ํ๋ค. ์ด๊ฒ ๋ํ ๋ฌธ์ ์ด๋ค.
- ์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด๋ค. ๋์ ์ผ๋ก ํ ๋นํ๋ค๋ ๋ง์, ํ๋ก๊ทธ๋จ์ด ์์๋ ํ์ ํ์์ ๋ฐ๋ผ์ ๊ทธ๋ ๊ทธ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ์ ์ฅํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. ์์ ๊ฐ์ ์์์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ์ค์ ํด ๋์ง ์๊ณ ๊ทธ๋ ๊ทธ๋ ํ๋ก๊ทธ๋จ์ด ์คํ ๋๋ ์๊ฐ์ 10๊ธ์๋ฉด 10๋ฐ์ดํธ , 110๊ธ์์ด๋ฉด 110๋ฐ์ดํธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ํํ๊ฒ ํ ๋นํ์ฌ ์ฌ์ฉํ์๋ ์๋์ด๋ค.
๐malloc()
- c์์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ํด์๋ ๋ณดํต malloc ๊ณ์ด์ ํจ์๋ค์ ์ฌ์ฉํ๋ค.
- void* malloc(size_t size)//mallocํจ์์ ์ํ
- ๋ง๋ก์ void* ๋ฅผ ๋ฆฌํดํ๋ค ๋ฐ๋ผ์ ๋ด๊ฐ ์ํ๋ ํ์ ์ผ๋ก ํ๋ณํ์ด ๊ฐ๋ฅํ๋ค. size_t๋ unsignde int๋ฅผ typedef ํด๋์ ๊ฒ์ด๋ค. ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์๊ฐ์ด ๋ ๋ฆฌ๋ ์๊ธฐ์ unsigned๋ก ์ ํด๋์ ๊ฒ์ด๋ค. size์๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ์ดํธ ์๋ฅผ ์จ์ฃผ๋ฉด ๋๋ค.
- malloc ํจ์๋ size๋งํผ ๋ฐ์ดํธ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ํ ๋นํ ํ ๊ทธ ์ฒซ๋ฒ์จฐ ์ฃผ์๊ฐ์ ๋ฆฌํดํด์ฃผ๋ฉฐ ๊ทธ ํ์ ์ void*์ด๋ค
- ์ void* ์ ๋ฆฌํดํ๋ ์ด์ ๋ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํ๋๋ฐ ์ ์๋ฅผ ์ ์ฅํ ์ง, ๋ฐฐ์ด์ ์ ์ฅํ ์ง, ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ฅํ ์ง ์ค์ง์ ์ผ๋ก ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
- char* pi =(char* p) malloc (sizeof(int)*10);
- //char 10๊ฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ ํ ๋นํ๊ณ ๊ทธ ์ฒซ๋ฒ์จฐ ์ฃผ์๋ฅผ charํ์ผ๋ก ํ๋ณํํ์ฌ pi์ ์ ์ฅ
๐calloc()
- void* colloc(size_t n , size_t size)
- malloc๊ณผ ๋ฌ๋ฆฌ ํจ์์ ๋งค๊ฐ๋ณ์๊ฐ 2๊ฐ์ด๋ค. ์์ n์ ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ์ ๋จ์ ๊ฐฏ์์ด๋ฉฐ, ๋ค์ size๋ ํ๋๋น ํฌ๊ธฐ๋ฅผ ์ด์ผ๊ธฐ ํ๋ค. ํ๋ง๋๋ก 4๊ฐx4๋ฐ์ดํธ, 10๊ฐ 1๋ฐ์ดํธ์ ๊ฐ์๊ฒ์ด๋ค.
- malloc๊ณผ ๋ค๋ฅธ์ ์ malloc์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ธฐํํ์ง ์์์ ์ฐ๋ ๊ธฐ ๊ฐ์ด ๊ทธ๋๋ก ๋ค์ด๊น์ง๋ง, callocํจ์๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ชจ๋ 0 ์ผ๋ก ์ด๊ธฐํ ์์ผ์ค๋ค.
๐์์คํ ์ฝ
- ์ด์์ฒด์ (OS)๋ '์ปค๋ ๋ชจ๋'์ '์ ์ ๋ชจ๋'๋ก ๊ตฌ์ฑ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ฐํ๋ ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ ๋ชจ๋์์ ์คํ๋๋ค. ์์คํ ์ฝ์ OS๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ผ๋ก ์ปค๋ ์์ญ์ ๊ธฐ๋ฅ์ ์ฌ์ฉ์ ๋ชจ๋์์ ์ฌ์ฉํ๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค. ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์์คํ ์ฝ์ ํธ์ถํ๊ฒ ๋๋ฉด ์ปค๋๋ชจ๋๋ก ์ ํ๋๋ค. ์ปค๋ ๋ชจ๋๋ ํ๋ก๊ทธ๋จ์ ํ์ฌ CPU์ํ๋ฅผ ์ ์ฅํ๊ณ CPU์์ ์ปค๋ ์ฝ๋๊ฐ ์คํ๋๋ค. ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด, ์ค๋จ๋๋ ํ๋ก๊ทธ๋จ์ CPU ์ํ๋ฅผ ๋ณต์ํ๊ณ ํต์ ๊ถ์ ์ ์ ๋ชจ๋๋ก ๋๊ฒจ์ค๋ค.์ปค๋๋ชจ๋๋ ์์คํ ์ ๋ณดํธํ๊ธฐ ์ํด ์กด์ฌํ๋ค. ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ฐํ ํ๋ก๊ทธ๋จ์ด ํจ๋ถ๋ก ํ๋์จ์ด๋ฅผ ์ ์ ํ๋ฉด, ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๐ sbrk / mmap ํจ์
- brk, sbrk ์์คํ ์ฝ์ malloc ํจ์์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์์ฒญํ ๋ ์ฌ์ฉ๋๋ ์์คํ ์ฝ์ด๋ค. malloc ํจ์ ์คํ ํ ์ค์ ๋ฉ๋ก๋ฆฌ๋ฅผ ํ ๋น ๋ฐ๊ธฐ ์ํด์ brk, sbrk, ๋๋ mmap ์์คํ ์ฝ์ ์ํํด์ผํ๋ค.
#include <unistd.h>
#include <sys/mman.h>
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
๐๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ
- ํ๋ก์ธ์๋ cpu๊ฐ ์คํํ์ผ์ ์๋ ๋ช ๋ น๋ค์ ์คํํ ์ ์๋๋ก OS๊ฐ ์คํ ํ์ผ์ ๋ช ๋ น๋ค์ ์ฝ์ด์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๊ตฌ์ฑํ ๊ฒ์ด๋ค. ํ๋ก์ธ์ค๋ ์ธ๊ทธ๋จผํธ์ ์งํฉ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
๐ก์ฝ๋ ์ธ๊ทธ๋จผํธ
- ์คํํ ํ๋ก๊ทธ๋จ์ ์ฝ๋๊ฐ ์ ์ฅ๋๋ ์์ญ์ผ๋ก text ์์ญ์ด๋ผ๊ณ ๋ ํจ
- cpu๋ ์ด ์์ญ์์ ๋ช ๋ น์ด๋ฅผ ํ๋์ฉ ๊ฐ์ ธ์ ์ฒ๋ฆฌํจ
- ์ฝ๋ ์์ญ์ ์์ค์ฝ๋๊ฐ ์ ์ฅ๋๋ ์์ญ์ผ๋ก, ์ปดํจํฐ๊ฐ ์คํํด์ผํ ๋ช ๋ น์ด๋ค์ด ์์๋๋ก ์์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
- ์ฝ๋ฉํ ๊ฒ์ ์คํ์ํค๋ฉด cpu๊ฐ ์์์ ์ฝ๋ ์์ญ์ ์ ์ฅ๋ ๋ช ๋ น์ด๋ค์ ํ๋์ฉ ๊ฐ์ ธ๊ฐ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์ปดํจํฐ๊ฐ ์์์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๋ ์์ญ์ด๋ค.
๐ก๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ
- ์ ์ญ ๋ณ์์ ์ ์ ๋ณ์๊ฐ ํ ๋น๋๋ ์์ญ
- ํ๋ก๊ทธ๋จ์ด ์์๋ ๋ ํ ๋น๋์ด, ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃํ๋ฉด ์๋ฉธ๋จ
- ์ ์ญ ๋ณ์ : ํจ์ ์ธ๋ถ์ ์ ์ธ๋์ด ์์ผ๋ฏ๋ก ํ๋ก๊ทธ๋จ์ด ์์ํ ๋ ์์ฑ๋๊ณ , ํ๋ก๊ทธ๋จ์ด ๋๋ ๋ ์๋ฉธ
- ์ ์ ๋ณ์ : ์ ์ธํ ์์น์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ฑ๋๊ณ , ํ๋ก๊ทธ๋จ์ด ๋๋ ๋ ์๋ฉธ
๐ก์คํ ์ธ๊ทธ๋จผํธ
- ์ฌ์ฉ์์ ์ํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๊ณ ํด์ ๋๋ ์์ญ
- ํ์์ ์ํด ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ๋ ์ฌ์ฉ
- ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ด๋ฆฌ
- ํ๋ก๊ทธ๋จ ๋์์์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋จ
- ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ์ํด์๋ง ์ฐธ์กฐ๋๊ณ ์ฌ์ฉ๋๋ ์์ญ
- ํ (heap) : ๋ฉ๋ชจ๋ฆฌ์ ๋ฎ์ ์ฃผ์์์ ๋์ ์ฃผ์์ ๋ฐฉํฅ์ผ๋ก ํ ๋น๋จ
- ์ง์ญ๋ณ์ ( stack ) : ๋ฉ๋ชจ๋ฆฌ์ ๋์ ์ฃผ์์์ ๋ฎ์ ์ฃผ์์ ๋ฐฉํฅ์ผ๋ก ํ ๋น
#include <stdio.h>
int x = 1; // Data ์์ญ
int y; // BSS ์์ญ: ์ด๊ธฐํ ๋์ง ์์ ๋ฐ์ดํฐ(์ ์ญ ๋ณ์)
int main(){
int z; // Stack ์์ญ: ์ง์ญ ๋ณ์
static int st_a; // BSS ์์ญ
static int st_b = 1; // Data ์์ญ: static
char* c; // Stack ์์ญ
c = malloc(10); // Heap ์์ญ
y = 2; // Code ์์ญ
return 0;
}
๐๋ฉ๋ชจ๋ฆฌ ํ ๋น malloc() , free()
- ์ ๊ทธ๋ฆผ์ 18์๋์ ์์ ํ์ malloc๊ณผ free์ ํตํด ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ณด์ฌ์ค๋ค
- ๊ทธ๋ฆผ a : 4์๋ ๋ธ๋ก์ ์์ฒญํ๋ฉฐ, ์ด ๋ธ๋ก์ ์ฒซ ๋ฒ์งธ ์๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๋ฆฌํดํ๋ค.
- ๊ทธ๋ฆผ b : 5์๋ ๋ธ๋ก์ ์์ฒญํ๋ฉฐ, 6์๋ ๋ธ๋ก์ ํ ๋นํ๋๋ฐ ์ด์ ๋ ์ด ์์ ๊ฐ ๋๋ธ ์๋ ๊ฒฝ๊ณ์ ์ ๋ ฌ๋๋๋ก ํ๊ธฐ ์ํด 1์๋๊ฐ ์ถ๊ฐ ํจ๋ฉ ๋ ๊ฒ์ด๋ค.
์ ๋ ฌ ์ ํ ์กฐ๊ฑด
์ ๋ ฌ ์ ํ ์กฐ๊ฑด์ด๋ ํ ๋น๊ธฐ์ ๋ธ๋ก์ ํ ๋น ์ ๋ธ๋ก๋ค์ด ๊ฐ์ง๋ byte์ ์๊ฐ ์ ๋ ฌ ์กฐ๊ฑด์ ๋ฐฐ์๊ฐ ๋๊ฒ ํ๋ ๊ฒ์ด๋ค.
์ฑ ์์๋ ๋๋ธ์๋(8byte)์ ๋ฐ์ดํฐ๋ฅผ ํ๋ณดํ๋ค๋ฉด ํค๋(4byte) + ๋ฐ์ดํฐ(8byte)๊ฐ ๋์ด 12byte๊ฐ ํ์ํ๋ฐ ๋๋ธ ์๋ ์ ๋ ฌ ์กฐ๊ฑด์ผ๋ก byte๊ฐ 8์ ๋ฐฐ์๊ฐ ๋์ด์ผ ํ๋ค. ์ด๋ ํจ๋ฉ 4byte ํ๋๋ฅผ ์ถ๊ฐํ์ฌ 8์ ๋ฐฐ์๋ฅผ ๋ง์ถฐ์ค๋ค.
- ๊ทธ๋ฆผ c : 6์๋ ๋ธ๋ก์ ์์ฒญํ๋ฉฐ, malloc์ ๊ฐ์ฉ ๋ธ๋ก์์ 6์๋ ๋ธ๋ก์ ํ ๋น
- ๊ทธ๋ฆผ d : free๋ก ํธ์ถ์ด ๋ฆฌํด๋ ํ์ ํฌ์ธํฐ p2๋ ์ฌ์ ํ malloc๋ ๋ธ๋ก์ ๊ฐ๋ฆฌํจ๋ค.
- ๊ทธ๋ฆผ e : 2์๋ ๋ธ๋ก์ ์์ฒญํ๋ฉฐ, ์ด์ ๋จ๊ณ์์ ๋ฐํ๋ ๋ธ๋ก์ ๋ถ๋ถ์ ํ ๋นํ๊ณ , ์๋ก์ด ๋ธ๋ก์ ํฌ์ธํฐ๋ฅผ ๋ฆฌํดํ๋ค.
๐๋ฌต์์ ๊ฐ์ฉ ๋ฆฌ์คํธ
- ํ ๋น๊ธฐ๋ ๋ธ๋ก ๊ฒฝ๊ณ๋ฅผ ๊ตฌ๋ถํ๊ณ , ํ ๋น๋ ๋ธ๋ก๊ณผ ๊ฐ์ฉ ๋ธ๋ก์ ๊ตฌ๋ถํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํ์๋ก ํ๋ค.
- ํ ๋ธ๋ก์ 1์๋ ํค๋, ๋ฐ์ดํฐ, ์ถ๊ฐ์ ์ธ ํจ๋ฉ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- ํค๋ : ๋ธ๋ก ํฌ๊ธฐ์ ํ ๋น ์ฌ๋ถ๋ฅผ ๋ด๋๋ค.
- ๋ฐ์ดํฐ : ๋ด์์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๋ถ๋ถ
- ํจ๋ฉ : ์ธ๋ถ ๋จํธํ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํ ์ ๋ต์ ์ผ๋ถ๋ถ์ผ๋ก ์ฌ์ฉ๋ ์๋ ์๊ณ , ์ ๋ ฌ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ๊ธฐ ์ํด ํ์.
๋ณดํต ํ๋์ ๋ธ๋ก์ 4๋ฐ์ดํธ๋ 8๋ฐ์ดํธ๋ก ๊ตฌ์ฑํ๋๋ฐ, ๊ทธ๊ฑธ ๋ถ๋ฅด๋ ๋จ์๋ฅผ word๋ผ๊ณ ๋ถ๋ฅธ๋ค, ๋ฐ๋ผ์ 1์๋๋ 4๋ฐ์ดํธ๊ณ , ๋๋ธ ์๋๊ฐ ๋ ๊ฒฝ์ฐ 8๋ฐ์ดํธ๊ฐ ๋๋ค. ๋ธ๋ก ํฌ๊ธฐ๋ ๋๊ฐ 4์ ๋ฐฐ์ ํน์จ 8์ ๋ฐฐ์๋ก ๊ตฌ๋ถ๋๋ค.
- ์ฒซ ์ธต์ ๋ธ๋ก์ ํค๋๋ก์ ๋ธ๋ก ํฌ๊ธฐ์ ๊ฐ์ฉ ์ฌ๋ถ๋ฅผ ๋ํ๋ธ๋ค. ๊ฐ์ฉ ์ฌ๋ถ๋ 3์๋ฆฌ ๋นํธ๋ก ์ด๋ฃจ์ด ์ง๋ค. ๋ง์ง๋ง ๋นํธ์ 0๊ณผ 1๋ก ํ ๋น๊ณผ ๊ฐ์ฉ์ ๊ตฌ๋ถํ๋ค. ์ ๋ค 2์๋ฆฌ๊ฐ ์ ์๋๋ฉด, ๋ธ๋ก ํฌ๊ธฐ๋ 16์ง์ ๋นํธ๋ก ์ด๋ฃจ์ด์ง๋๋ฐ ๊ฐ์ฉ ์ฌ๋ถ ๋ํ 16์ง์ ๋นํธ๋ก ๊ตฌ์ฑํด์ผ ๋นํธ ์ฐ์ฐ์ ํตํด ํ๋์ 16์ง์๋ก ๊ตฌ์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋๋ฒ์งธ ์ธต์ ๋ฐ์ดํฐ์ด๋ค. ํ ๋น๋ ๋ธ๋ก์ ๊ฒฝ์ฐ ํน์ ํ ์๋ฃ๊ฐ ๋ด๊ธด๋ค.
- ์ธ๋ฒ์งธ ์ธต์ ํจ๋ฉ์ด๋ค. ํจ๋ฉ์ ๋ธ๋ก์ ํฌ๊ธฐ๋ฅผ ์ผ๊ด์ ์ผ๋ก ์ ๋ ฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ค์ด๊ฐ๋ค. ๋ธ๋ก์ ํฌ๊ธฐ๋ ๊ท๊ฒฉํ ๋์ด์ผ ํจ์จ์ฑ์ด ์ฆ๊ฐํ๋ค. ํ๋์ ๋ธ๋ก ํฌ๊ธฐ๊ฐ ๋ค ๋ค๋ฅด๋ค๋ฉด ์ปดํจํฐ๋ ๋ธ๋ก์ ๋ค ๋ฐ๋ก๋ฐ๋ก ๊ณ์ฐํด์ผํ๋ค.
์๋ฅผ๋ค์ด ํฌ๊ธฐ๊ฐ 2byte์ธ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ผ ํ๋ฉด, ์ปดํจํฐ๋ 16byte ๋ธ๋ก์ ํ ๋นํ ๊ฒ์ด๋ค. ์๋ํ๋ฉด header์ footer๋ ๋ฌด์กฐ๊ฑด ๋ค์ด๊ฐ์ผํ๋๋ฐ, ์ด๋ค์ ๊ฐ๊ฐ 4๋ฐ์ดํธ์ฉ์ด๋ค.
2+4+4 = 10๋ฐ์ดํธ๋ก ์์ฑ ์๊ฑด์ ์ถฉ์กฑํ์์ง๋ง, ๋ฐฉ๊ธ ๋งํ๋ฏ์ด ๊ท๊ฒฉํ ํด์ผํ๊ณ 8์ ๋ฐฐ์ ๋ฑ์ผ๋ก ๋ฌด์กฐ๊ฑด ์ ๋ ฌ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฏธ ๋ค์ด๊ฐ์ผ ํ๋ ์๋ฃ๊ฐ 8byte๋ฅผ ๋์ผ๋ 6๋ฐ์ดํธ๋ฅผ ๋ํด 16๋ฐ์ดํธ ๋ธ๋ก์ ํ ๋นํ๋ค.
์ด๋ ํจ๋ฉ์ ์ฌ์ฉํด 6๋ฐ์ดํธ๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
- ๋ง์ง๋ง ์ธต์ ๋ธ๋ก์ ํธํฐ๋ก์ ํค๋์ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๋ค. ๊ตณ์ด 2๊ฐ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ์ด์ ๋
- ์๊ฐ์ ์ผ๋ก ๋ธ๋ก์ ์ฐ๊ฒฐ์ ์ค์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. donald knuth๋ผ๋ ์ฌ๋์ด ๊ฒฝ๊ณ ํ๊ทธ๋ผ๋ ๊ธฐ๋ฒ์ ๊ฐ๋ฐํ๋๋ฐ, ๊ฐ ๋ธ๋ก์ด ํธํฐ๋ฅผ ํฌํจํ๊ฒ ๋๋ฉด ํ ๋น๊ธฐ๋ ์์ ์์น์ ์ด์ ๋ธ๋ก์ ์ํ๋ฅผ ์์ ์ ํธํฐ๋ง ์กฐ์ฌํด์ ํ์ ํ ์ ์๋ค. ์ด์ ๋ธ๋ก์ ํญ์ ํ์ฌ ๋ธ๋ก์ ์์ ๋ถ๋ถ์์ 1word ์์ ์์นํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํธํฐ๋ฅผ ๋ฃ์์ผ๋ก์จ ์ด์ ๋ธ๋ก๊ณผ ๋ค์ ๋ธ๋ก์ ์ํ๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค. ๋ฌผ๋ก , ์ฅ์ ๋ง ์๋๊ฒ์ ์๋๋ค. ๋ชจ๋ ๋ธ๋ก์ด ํค๋์ ํธํฐ๋ฅผ ์ ์งํด์ผ ํ๋ฏ๋ก ๋ธ๋ก๊ทธ์ด ๊ฐ์๊ฐ ๋ง์์ง๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํด๋๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ฌ๊ธฐ์ ์ด ์ฐ์๋ ๋ฐฐ์ด์ ๊ฐ์ฉ๋ฆฌ์คํธ๋ค. ์ค์ malloc ๊ตฌํํ ๋ ์ฐ์ด๋ ๊ฐ๋ ์ด๋ค.
- ํจ๋ฉ : ์์ ์ค๋ช ํ ์ฉ๋์ ํจ๋ฉ๊ณผ ๋๊ฐ๋ค.
- ํ๋กค๋ก๊ทธ ํค๋, ํธํฐ : ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ฑฐ๋ ๋ฐํํ๋ค๋ณด๋ฉด ๋ธ๋ก์ ์ฐ๊ฒฐํด์ผ ํ ์ผ์ด ์๊ธด๋ค. ๊ทธ ์ฐ๊ฒฐ ๊ณผ์ ๋์์ ๊ฐ์ฅ์๋ฆฌ ์กฐ๊ฑด์ ์์ ๊ธฐ ์ํ ํธ๋ฆญ
- ์ํ๋ก๊ทธ ํค๋ : ์ํ๋ก๊ทธ ํค๋ ๋ํ ํ๋กค๋ก๊ทธ์ ๊ฐ์ ์ผ์ข ์ ํธ๋ฆญ์ด๋ค.
- header, footer : ์ค์ ๋ก ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๋ ๋ธ๋ญ์ ํค๋์ ํธํฐ์ด๋ค. ์์ ๋ธ๋ก ๊ทธ๋ฆผ์์ ์ค๋ช ํ ํค๋์ ํธํฐ๋ผ๊ณ ์ดํดํ๋ฉด ๋จ
- mallocํ๋ก๊ทธ๋จ์ ์ ์ฒด ํ์์ ์ด ๊ฐ์ฉ ๋ฆฌ์คํธ๋ฅผ ํ ๋นํ ๋ค์, ๊ฐ์ฉ ๋ฆฌ์คํธ ๋ด๋ถ์ ๋ธ๋ก์ ํ ๋น & ๋ฐํํ๊ณ , ๊ฐ์ฉ ๋ฆฌ์คํธ๊ฐ ๋์น๋ฉด ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ์ถ๊ฐํ๊ณ ๋นผ๋ ์์ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ์๊ฐํ๋ฉด๋๋ค.
๐ํ ๋นํ ๋ธ๋ก ๋ฐฐ์น ๋ฐฉ๋ฒ
- First fit
๋ฆฌ์คํธ๋ฅผ ์ฒ์๋ถํฐ ํ์ํด์ ํฌ๊ธฐ๊ฐ ๋ง๋ ์ฒซ ๋ฒ์งธ ๊ฐ์ฉ ๋ธ๋ก์ ์ ํํ๋ค. - Next fit
First fit๊ณผ ์ ์ฌํ์ง๋ง, ๊ฒ์์ ๋ฆฌ์คํธ์ ์ฒ์์์ ์์ํ๋ ๋์ ์ ๊ฒ์์ด ์ข ๋ฃ๋ ์ง์ ์์ ๊ฒ์์ ์์ํ๋ค. - Best fit
๋ชจ๋ ๊ฐ์ฉ ๋ธ๋ก์ ๊ฒ์ฌํ์ฌ ํฌ๊ธฐ๊ฐ ๋ง๋ ๋ธ๋ก ์ค ๊ฐ์ฅ ์์ ๋ธ๋ก์ ์ ํํ๋ค.
๐๊ฒฝ๊ณ ํ๊ทธ๋ก ์ฐ๊ฒฐํ๊ธฐ
- ๋ง์ฝ ๋ฐํํ์ฌ ๊ฐ์ฉ์ํ๋ก ๋ง๋๋ ๋ธ๋ก์ด ํ์ฌ๋ธ๋ก์ด๋ผ๊ณ ํ ๋, ๋ค์ ๊ฐ์ฉ ๋ธ๋ก์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๊ฐ๋จํ๋ค. ํ์ฌ ๋ธ๋ก์ ํค๋์ ์ฃผ์์์ ํค๋์ ํฌ๊ธฐ๋ฅผ ๋ํด์ฃผ๋ฉด ๋ค์ ๋ธ๋ก์ ํค๋๋ฅผ ์ฐพ์ ์ ์๋ค. ํ์ง๋ง ์ด์ ๋ธ๋ก์ ์ฐพ๊ธฐ ์ํด์๋ ์์์๋ถํฐ ๋ค์ ํ์ํด์ผ ๊ฐ๋ฅํ๋ค.
- ์ ๊ฐ์ฉ ๋ธ๋กํ๋ ๊ณผ์ ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด ๋ธ๋ก์ ์๋ก์ด ์์ ํธํฐ๊ฐ ์ถ๊ฐ ๋๋ค.
๐ก์ฐ๊ฒฐํ๋ ๋ค๊ฐ์ง ๊ฒฝ์ฐ
- case1: ์ด์ ๊ณผ ๋ค์ ๋ธ๋ก์ด ๋ชจ๋ ํ ๋น๋์ด ์๋ ์ํ
- ํ์ฌ ๋ธ๋ก์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
- case:2 ์ด์ ๋ธ๋ก์ ํ ๋น ์ํ, ๋ค์ ๋ธ๋ก์ ๊ฐ์ฉ์ํ
- ํ์ฌ๋ธ๋ก๊ณผ ๋ค์ ๋ธ๋ก์ด ํตํฉ๋๋ค.
- case:3 ์ด์ ๋ธ๋ก์ ๊ฐ์ฉ์ํ, ๋ค์ ๋ธ๋ก์ ํ ๋น ์ํ
- ์ด์ ๋ธ๋ก์ ํค๋์ ํ์ฌ ๋ธ๋ก์ ํํฐ๋ ๋ ๋ธ๋ก์ ํฌ๊ธฐ๋ฅผ ํฉํ ๊ฒ์ด๋ค.
- ์ด์ ๋ธ๋ก๊ณผ ๋ค์ ๋ธ๋ก ํตํฉ
- case:4 ์ด๋ฒ ๋ธ๋ก๊ณผ ๋ค์ ๋ธ๋ก ๋ชจ๋ ๊ฐ์ฉ ์ํ์ด์ ๋ธ๋ก์ ํค๋์ ๋ค์ ๋ธ๋ก์ ํธํฐ๋ ์ธ ๋ธ๋ก์ ํฌ๊ธฐ๋ฅผ ํฉํ ๊ฒ์ผ๋ก ๊ฐฑ์ ๋๋ค.
- ์ธ ๋ธ๋ก ๋ชจ๋ ํ๋์ ๊ฐ์ฉ ๋ธ๋ก์ผ๋ก ํตํฉ
๐๋จํธํ
๋ฉ๋ชจ๋ฆฌ ๋จํธํ
- ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์์ ์กฐ๊ฐ์ผ๋ก ๋๋ ์ ธ ์ฌ์ฉ ๊ฐ๋ฅํ
๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ ์กด์ฌํ์ง๋ง ํ ๋น(์ฌ์ฉ)์ด ๋ถ๊ฐ๋ฅํ ์ํ
๐ก๋ด๋ถ ๋จํธํ
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ๋ ํ๋ก์ธ์ค๊ฐ ๋ณด๋ค ๋ ํฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ญ๋นํ ๋
๐ก์ธ๋ถ ๋จํธํ
- ์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ถฉ๋ถํ์ง๋ง ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ๋จ์ผํ ๊ฐ์ฉ ๋ธ๋ก์ด ์์ ๋ ๋ฐ์
- ์ ๊ทธ๋ฆผ์์ ํ๋ ๋ถ๋ถ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ํ ํฐ์์ ๊ฐ์ฉ ์ํ ๋ธ๋ก์ ๋ํ๋ธ๋ค.
- ๋ง์ฝ ์์ ์ํ์์ 8๋ธ๋ก์ ์์ฒญํ๋ฉด ๊ฐ์ฉ ๋ธ๋ก์ ์(ํฐ์)๋ 8๊ฐ๋ก ์ถฉ๋ถํ์ง๋ง
- ๋จ์ผ ๊ฐ์ฉ ๋ธ๋ก์(6๊ฐ p2์ p3 ์ฌ์ด)๋ 8๊ฐ๊ฐ ๋์ง ์์ ์ธ๋ถ ๋จํธํ๊ฐ ๋ฐ์ํ๋ค.
'SWjungle > #malloc' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[malloc] budy๋ฉ๋ชจ๋ฆฌ ํ ๋น (2) | 2023.09.14 |
---|---|
[malloc] segregated free list ๋ฐฉ์ - ๊ตฌํ (0) | 2023.09.13 |
[malloc] Explicit Free List ๋ฐฉ์ - ๊ตฌํ (0) | 2023.09.12 |
[Malloc] Implicit Free List๋ฐฉ์-๊ตฌํ (1) | 2023.09.11 |