CHAAANY ARCHIVE

glibc malloc

2개의 기록을 주제별로 둘러보세요.

free 후 RSS가 줄지 않는 이유: glibc 재사용·mmap·trim 구분

free(ptr)를 호출한 뒤에도 top이나 ps의 RSS가 그대로인 경우가 있다. 이른바 free RSS 문제를 볼 때 그 자체만으로 memory leak이라고 결론 내릴 수도, allocator가 memory를 정상 반환했다고 단정할 수도 없다.핵심은 free()가 보장하는 범위와 RSS가 세는 범위가 다르다는 데 있다. 아래 내용은 Linux에서 glibc allocator를 사용하는 process를 기준으로 한다.free는 allocation의 수명을 끝내는 API다유효한 pointer를 free()하면 application은 그 allocation을 더 이상 사용하면 안 된다. 이후 같은 주소의 byte를 읽거나 쓰는 것은 undefined behavior다.allocator 관점에서는 해당 c..

glibc malloc은 메모리를 어디서 얻나: brk·mmap·재사용

malloc(100)을 호출했다고 해서 glibc가 매번 kernel에 100 byte를 요청하는 것은 아니다. 먼저 allocator가 이미 확보한 free chunk를 찾고, 재사용할 영역이 부족할 때 process의 data segment를 늘리거나 anonymous mmap()으로 새 mapping을 만든다.여기서 범위를 분명히 할 필요가 있다. C 표준은 malloc()의 API와 반환값 규칙을 정할 뿐, 내부에서 brk와 mmap 중 무엇을 써야 하는지는 정하지 않는다. 아래 설명은 Linux에서 현재 GNU C Library(glibc)의 allocator를 사용하는 경우를 기준으로 한다. jemalloc·tcmalloc·musl은 전략이 다를 수 있다.첫 번째 후보는 이미 확보한 chunk..

728x90