Вы почти получили это.Одна вещь, которую вы пропустили, это то, как процесс запрашивает у системы больше виртуальной памяти.Как отметил Томас, вы не можете просто написать, где хотите.Нет причин, по которым ОС не может быть спроектирована таким образом, но гораздо эффективнее, если она имеет некоторое представление о том, где вы собираетесь писать, и о том, где вы делаете, это непрерывно.
В UnixyВ системах пользовательские процессы имеют область, называемую сегмент данных , что звучит так: именно туда идут данные.Когда процессу требуется память для данных, он вызывает brk()
, который просит систему расширить сегмент данных до указанного значения указателя.(Например, если ваш существующий сегмент данных был пуст и вы хотели бы расширить его до 2M, вы бы позвонили brk(0x200000)
.)
Обратите внимание, что, хотя и очень часто, brk()
не является стандартом;на самом деле он был вырван из POSIX.1 десять лет назад, потому что C указывает malloc()
, и нет никаких оснований назначать интерфейс для выделения сегмента данных.