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 |