본문 바로가기

SW사관학교 정글/Malloc-lab4

[Malloc-lab] 동적 메모리 할당기(Dynamic Memory Allocator) 이해 과정 ※ 이 글은 Why(왜)와 ?(물음표)를 바탕으로 작성한 글입니다. ※ ※ 이해의 과정을 나열한 것이기 때문에 순서대로 천천히 읽는 것을 추천합니다. ※ 목차 1. Dynamic Memory Allocation을 하는 이유 2. Dynamic Memory Allocator는 어떤 역할을 하기에 중요한가? 3. Dynamic Memory Allocator는 어디에서 memory를 가져와서 할당해주고, 반납해주는가? 4. 할당기와 가용리스트 확실히 하기 (명시적 vs 묵시적) 5. Dynamic Memory Allocator를 만드는 이유 👩‍💻 6. Dynamic Memory Allocator를 실제로 구현할 때 어떤 것들을 중요하게 고려해야하는가? 7. Dynamic Memory Allocator 만들기.. 2022. 11. 2.
[Malloc-lab] malloc, calloc, realloc, free, brk, sbrk, mmap 기본 개념 정리 💡malloc, calloc, realloc, free, brk, sbrk, mmap💡 1. malloc() 함수 원형 : void *malloc(size_t size) 기능: 메모리 동적 할당 헤더: 매개변수: size_t size 메모리의 크기 리턴값: 성공 => 할당한 메모리의 첫 번째 주소, 실패 => NULL #include void *malloc(size_t size); // Returns: pointer to allocated block if OK, NULL on error int *arr; arr = (int *)malloc(sizeof(int)*5); // 배열 5개, 총 20바이트로 할당함 2. calloc() 함수 원형 : void *calloc(size_t count, size_t .. 2022. 11. 2.
[Malloc-lab] 가상메모리(Virtual Memory) 동적 메모리 할당 개념에 들어가기 앞서, 가상메모리가 무엇인지는 알고 들어가야할 것 같다. Q. 가상메모리가 무엇인가? 단순한 임베디드 마이크로컨트롤러와 같이 가상 메모리 기술을 사용하지 않는 시스템에서는 메모리 참조 방식이 아래 왼쪽 그림과 같다. 즉, CPU가 물리 주소를 메인 메모리에 바로 입력하여 메모리 참조를 진행하는 것이다. 반면 대부분의 현대 데스크탑, 서버, 노트북과 같이 가상 메모리 기술을 사용하는 시스템에서는 메모리 참조 방식이 아래 오른쪽 그림과 같다. 요즘 통상적으로 컴퓨터의 메모리는 8GB 혹은 16GB이다. 리눅스의 경우 하나의 프로세스가 4GB인데, 실제로 각각의 프로세스에 이만큼의 메모리를 할당하기에는 실제 메모리 크기에 한계가 있다. 프로세스를 실행하기 위해서 코드는 반드시.. 2022. 10. 28.
[Malloc-lab] 메모리 영역(데이터 세그먼트) 코치님에게 csapp를 읽으면서 스택과 힙에 할당되는 부분에 관해 아직 헷갈리는 부분이 있다고 의도치 않은(?) 고백을 해버렸고 다시 질문이 날라왔다. '그럼 지역변수와 전역변수가 할당되는 곳은 어디에요?' 대답은 했지만 말끔하게 못한 것 같다.. 아직 머릿속에 정확하게 정리가 안 된 것 같아 정리하는 글이다. 메모리 영역은 어떻게 구성되어 있는가. Q. 프로세스 메모리 영역은 어떻게 구성되어 있는가? 프로그램을 실행시키면 운영체제는 우리가 실행시킨 프로그램을 위해 메모리 공간을 할당해준다. 할당되는 메모리 공간은 크게 코드(Code), 데이터(Data), BSS, 힙(Heap), 스택(Stack)영역으로 나뉘어진다. 코드(Code) 영역 - 실행할 프로그램의 코드가 저장되는 영역으로 Text 영역이라고.. 2022. 10. 28.