Не обязательно, по крайней мере, не в соответствии с его определением.
И я полагаю, что с ASLR может случиться так, что верхние адреса больше не будут доступны, поэтому mmap
долженвыберите более низкий диапазон адресов.
Очевидно, что на 32-битных процессорах (и ядрах) пространство памяти может быть почти заполнено, поэтому при запросе большого mmap
-го диапазона ядро должно найти тот, который подходит,и это может быть где угодно.
Если вы хотите монотонное направление, используйте sbrk (но я действительно рекомендую не использовать его).
Другой возможностью может быть предварительнаявыделите очень большое количество (например, несколько терабайт) адресного пространства, используя mmap
с MAP_NORESERVE
при инициализации программы, и снова вызовите mmap
с MAP_FIXED
внутри этого диапазона, чтобы получить действительно полезное пространство (в более управляемых фрагментах,например, десятки мегабайт).
@ MetallicPriest: вы действительно должны мотивировать и объяснить гораздо больше своих вопросов.Там так загадочно и странно (и даже я не могу угадать весь контекст), что отвечать на них не очень весело.