Привет всем) Не могу никак разобраться с тем как происходит работа с памятью и как выглядит карта памяти процесса. Пока у меня такое представление: Процесс видит всю память которая есть в системе, пусть для примера 4гб, первый гиг резервируется ядром и никогда не будет доступен пользовательским процессам. Остальные 3 гб -> пространство которе процесс видит, но не обязательно может использовать. Когда программа загружается в память то разные ее части загружаются в разные сегменты(диапазоны адресов): стек который начинается сразу после пространства ядра и растет в сторону больших адресов пока не упрется в какой то лимит, сегмент куда отображаются файлы, куча, не инициализированные переменные, данные, и код.
Я читал статьи про устройство виртуальной памяти, как выглядит память процесса и тд. НО все описывается как то поверхностно.
У меня такой вопрос: как работает malloc()? ясно что он выделяет память в куче. Но если минимально сколько можно выделить вирт памяти это одна страничка, то что тогда именно делает malloc и вообще функции выделения динамической памяти?? Из чего складывается размер который программа занимает в памяти? Как расчитывается изначальный размер сегментов?
И самое главное: как посмотреть, как это работает на самом деле? То есть в самых мелких подробностях. Ну когда например Тодвальтс начинал писать ядро, он же знал что делать? Как начать и как организовать работу ядра? Подскажите пожалуйста с чего начать изучение всего этого)