Одним из самых больших преимуществ разделения программ на секции кода и данных является то, что он позволяет секции кода быть доступной только для чтения, в то время как секции данных могут быть доступны для записи.Это защищает раздел кода от случайного изменения программой, а также позволяет разделять его между процессами, выполняющими одну и ту же программу.
В последнее время появилась возможность разрешать только выполнение кода в разделе кодаважный.Это связано с тем, что количество эксплойтов зависит от возможности выполнения кода вне раздела кода.Еще одно недавнее преимущество разделения кода и данных заключается в том, что неупорядоченные ЦП могут в конечном итоге спекулятивно выполнять данные, что приведет к снижению производительности, если код и данные будут смешаны.
Раздел bss существует как расширение данных.раздел.Он содержит все данные программы, которые инициализируются до нуля.Разделив инициализированные нулями данные таким образом, это позволяет разделу bss фактически не сохраняться в исполняемом файле программы.Оба экономят дисковое пространство и ускоряют загрузку.Раздел bss в памяти просто заполняется нулями, а не считывается в память.
Куча и стек похожи в том, что они оба используются для динамического выделения объектов во время выполнения программы.Разница между ними заключается в том, что объекты, размещенные в куче, могут быть освобождены в любое время, тогда как все, что помещено в стек, может быть удалено только после того, как все помещено в стек после того, как оно удалено.Каждый раз, когда функция вызывается, пространство выделяется в стеке для таких вещей, как аргументы функции, адрес возврата и локальные переменные.Когда функция возвращает эти вещи удаляются из стека.Почти все, что динамически выделяется, выделяется в куче.
Традиционно в системах Unix куча располагалась в памяти после секции bss, которая появляется после секций кода и данных.По мере того как вещи распределялись в куче, они росли вверх, чтобы освободить место для них по мере необходимости.Стек помещался в конец памяти и рос вниз.