malloc은 대체 무슨 일을 하는 걸까?
What is malloc doing, anyway?
malloc(16)을 1000번 호출해도 커널 시스템 콜은 단 두 번뿐이다. glibc는 brk로 힙을 키운 뒤 청크 헤더와 프리 리스트로 메모리를 쪼개고 합치며 재사용한다. 직접 범프 할당자를 만들어 보면 malloc(16)이 sbrk(16)보다 22.7배 빠른 이유가 드러나고, 요구 페이징과 trim을 통해 메모리가 실제로 커널에 반환되는 과정까지 단계별로 살펴본다.
이 실행에서 프로그램 브레이크와 libc의 printf는 23.4 TiB 떨어져 있는데, 이는 머신의 15.6 GiB RAM의 약 1,530배에 해당한다. 그 범위의 거의 전부가 매핑되지 않아 물리 메모리를 차지하지 않는다.
HN 토론
56- assumed_throwaw
좀 딴 얘기지만, malloc 추상화의 복잡성과 오버헤드가 바로 나를 "스택 전용" 언어, 예를 들어 최근에 발표된 Goose 같은 것에 매우 흥미를 느끼게 만든 이유다. 그것을 (거의) 완전히 없애버린다는 발상에는 뭔가 매우 우아하고 흥미진진한 점이 있다. 현대 프로그래밍 언어들이 가비지 컬렉터를 대체하는 좋은 인체공학을 개발해온 것처럼, 힙 할당 메모리를 대체하는 데도 같은 일이 이루어질 수 있기를 바란다.
- K0IN
wasm이 처음 나오고 clang 지원이 막 생겼을 때 wasm에 입문하면서, 나는 나만의 libc와 malloc을 직접 작성했는데, 이 모든 저수준 함수들과 트릭(예를 들어 free list)을 배우는 데 정말 큰 도움이 되었다. 나는 또한 wasm을 꽤 잘 읽을 수 있다는 점을 좋아하고, 툴링이 그냥 .wat를 반환해서 읽을 수 있게 해주는 점도 좋다.
- projectileboy
이 주제(그리고 관련 주제)를 위한 좋은 학습 자료: https://cs61.seas.harvard.edu/site/2026/
- bajard
Malloc()은 느ee리다. free()까지 쓰면 더욱 그렇다. 가능하다면 단일 배열을 할당해서 거기서 긁어 쓰는 걸 고려해보라.
- wpmaven
예전에 이걸 아주 잘 설명한 글을 찾았는데, 더 자세한 내용을 원하는 사람들을 위해: https://sploitfun.wordpress.com/2015/02/10/understanding-gli...