출처: https://3months.tistory.com/307 [Deep Play]

3-2/운영체제

Memory API

코딩하는 랄뚜기 2021. 10. 8. 19:10

Virtual Address Space

만약 molloc, free() 등과 같은 함수를 읽게 되면 syscall이 발생하여 brk,sbrk,mmap과 같은 기능을 하게 된다.


malloc()


sizeof()


free()


 

Forgetting To Allocate Memory

언뜻 보면 위에 코드가 맞는 것 처럼 보이지만 *dst는 unallocated되어있기 때문에 *src의 내용을 받을 공간이 없다.

미리 *dst에 공간을 할당해주면 된다.

문제는 적게 할당을 하더라도 error없이 잘 돌아간다는 것이다. 이런 에러는 나중에 일일이 다 뜯어서 고쳐야하므로 주의하도록하자.

공간만 할당하고 안에 내용을 넣지 않은 채로 접근하는 것도 문제가 된다.


Memory Leak

heap 영역에 메모리를 다 사용했다면 반드시 free를 해줘야 한다. 해주지 않으면 unused한 공간이 너무 많아지게 된다.


Dangling Pointer

*a와 *b가 위 처럼 연결 되었을 때, *b를 함부로 free 하면 안된다. unreachable address가 발생 할 수 있다.


Incorrect free()

free된 memory를 다시 free하거나 allocate 되지 않은 memory를 free하면 문제가 발생할 수 있다.


calloc() and realloc()


System Calls : brk, sbrk

API를 통해 System call이 발생하면 brk나 sbrk를 통하여 공간을 할당해준다.(줄여줄 수 도 있다.) 한 번 할당할 때 System Call을 줄이기 위하여 보통 4KB씩 공간을 할당해 준다.


System Calls : mmap

mmap은 별도의 공간에 할당해주는 것이다.

'3-2 > 운영체제' 카테고리의 다른 글

Introduction to Paging  (0) 2021.10.08
Segmentation  (0) 2021.10.08
The Abstraction : Address Space  (0) 2021.09.30
Multiprocessor Scheduling  (0) 2021.09.24
Scheduling:The Multi-Level Feedback Queue  (0) 2021.09.17