background
ptmalloc2
ptmalloc2 ptmalloc2(pthread malloc 2)는 Wolfram Gloger가 개발한 Memory Allocator로 (이하 ptmalloc이라 함) Doug Lea의 dlmalloc을 개선한 ptmalloc의 두 번째 버전이다. ptmalloc은 리눅스에서 사용하고 있으며 GLibc에 구현되어 있다. ptmalloc의 목표는 "메모리의 효율적인 관리"이다. 이는 아래와 같은 목표를 가지고 있다. 1. 메모리 낭비 방지 컴퓨터의 전체 메모리는 한정적이므로 새로운 메모리 공간을 무한히 할당할 수는 없다. 그래서 ptmalloc은 메모리 할당 요청이 발생하면 먼저 해제된 메모리 공간 중에서 재사용할 수 있는 공간이 있는지 탐색한다. 해제된 메모리 공간 중에서 요청된 크기와 같은 크기의 메..
함수의 프롤로그와 에필로그
콜 스택 구조에서 함수는 자신만의 스택 프레임을 가지게 된다. 서로의 스택 프레임을 구분하기 위해 함수는 프롤로그와 에필로그 과정을 가진다. (이 글에선 인텔 아키텍쳐 32비트의 어셈블리어를 기준으로 설명한다) 함수의 프롤로그(prolog) 함수의 첫 부분엔 아래와 같은 코드가 있다. push ebp; mov ebp, esp; ebp 레지스터는 보통 스택 프레임의 맨 밑바닥을 가리킨다. esp 레지스터는 스택 프레임의 최상단을 가리킨다. 스택에서 esp 보다 위에 있는 값들은 사용하지 않는다. 함수가 호출될 때 ebp와 esp는 새로운 스택 프레임의 빌드를 위해 움직이는데 push ebp를 통해 호출 함수(caller)의 ebp가 저장(백업)된다. 이 값은 호출된 함수(callee)가 실행을 마치고 re..
fork-exec
fork() is the name of the system call that the parent process uses to "divide" itself ("fork") into two identical processes. After calling fork(), the created child process is an exact copy of the parent except for the return value of the fork() call. This includes open files, register state, and all memory allocations, which includes the program's executable code. In some cases the two continue..