Что на самом деле делает malloc?
What is malloc doing, anyway?
Разбираем, как malloc в glibc управляет памятью: от системных вызовов brk и mmap до заголовков чанков, списков свободных блоков и объединения соседних участков. Узнаете, почему тысяча вызовов malloc(16) порождает всего два системных вызова, как устроен bump-аллокатор и зачем нужна отдача памяти ядру через trim.
malloc(16) выполняется в 22,7 раза быстрее, чем sbrk(16).
- assumed_throwaw
Немного в сторону, но сложность и накладные расходы абстракции malloc — именно то, что меня очень заинтриговало в «стековых» языках, таких как недавно опубликованный Goose. В идее (почти) полностью избавиться от неё есть что-то очень элегантное и захватывающее. Подобно тому, как современные языки программирования разработали хорошую эргономику, заменяющую сборщик мусора, то же самое, надеюсь, можно сделать и для замены памяти, выделяемой в куче.
- K0IN
Когда я начал разбираться с wasm, когда он был новым и имел поддержку clang, я написал свою собственную libc и malloc, и это было отличным обучением всем этим низкоуровневым функциям и трюкам (например, free lists). Мне также нравится, что я могу довольно хорошо читать wasm, и инструменты хороши тем, что можно просто вернуть .wat и прочитать его.
- projectileboy
Хороший учебный ресурс по этой (и смежным) темам: https://cs61.seas.harvard.edu/site/2026/
- bajard
Malloc() — медленный. Ещё медленнее, если вы также используете free(). По возможности рассмотрите выделение одного массива и работу в нём.
- wpmaven
Я нашёл это очень хорошо объяснённым некоторое время назад, для тех, кто ищет больше деталей: https://sploitfun.wordpress.com/2015/02/10/understanding-gli...