Думайте об этом как о 2 возможностях:
выравнивание end_data_segment
по границе страницы; и убедитесь, что размер базовой области виртуального адресного пространства точно соответствует значению end_data_segment
, не выравнивайте end_data_segment
по границе страницы; и убедитесь, что размер базовой области виртуального адресного пространства выровнен (округлен) до размера страницы
Для первой возможности - портативное программное обеспечение (которое не имеет представления о том, что размер страницы) может (например) увеличить end_data_segment
на 1/8 части страницы и сделать это 8 раз, и вместо того, чтобы в итоге получить одну дополнительную страницу (результат, который вы, естественно, ожидаете), он в конечном итоге с 8 дополнительными страницами (на 7 страниц больше, чем хотелось, и на 7 страниц больше, чем ожидалось). Хуже; программное обеспечение может уменьшить размер end_data_segment
менее чем на страницу, и ничего не будет делать (будет округлено до первоначального значения); и это также может быть сделано много раз, приводя к большой области, от которой программное обеспечение пыталось избавиться, но все еще существует. Конечно, их можно комбинировать - программное обеспечение может увеличить end_data_segment
на 1 байт, а затем уменьшить end_data_segment
на один байт в середине всего oop, вызывая неожиданную утечку памяти (пространства), которая может быстро поглотить все доступные виртуальные адресное пространство, когда люди ожидали, что это ничего не пропустит. Конечно, программное обеспечение может явно обойти все проблемы, добавляя (нестандартные / непереносимые) исправления везде, но это будет ужасно уродливо.
Вторая возможность (не выравнивать end_data_segment
) является более интуитивным, более удобным и менее подверженным ошибкам.