По mmap ОЗУ не предоставляется.Предоставляется адресное пространство.
При обращении к адресному пространству возникает ошибка страницы.При сбое страницы в размере страницы, обычно 4096 байт, предоставляется ОЗУ.
Содержимое ОЗУ также предоставляется.Если файлом задано адресное пространство, появится содержимое файла.Если MAP_ANONYMOUS поддерживает адресное пространство, то появляется ОЗУ, инициализированное нулем.
Описанные выше две блага описаны.Во-первых, точно так же, как желаемый ОЗУ может быть инициализирован.Во-вторых, до тех пор, пока не будет предоставлена необходимая оперативная память.
Для запроса адреса менее 2 мегабайт, выполняемого malloc, разрыв программы расширяется.Пока предоставляются адреса, близкие к разрыву программы, разрыв программы не может быть заключен.Поэтому освободившееся ядро ОЗУ может быть не возвращено.Аналогия следует.Можно ли удалить носки перед ботинками?
При вызове munmap к ОЗУ ядра возвращается сразу.Благодаря использованию mmap и munmap вероятность свопа уменьшается.С помощью malloc возможна перестановка расширения программы.
С помощью malloc может быть выделено меньше памяти, чем размер страницы.Разрывная память становится.Память ядра также может фрагментироваться.Ни один из них не идеален.
На любом неработающем процессоре ядро ОЗУ может быть дефрагментировано.Создаются прозрачные огромные страницы размером 2 мегабайта.По сравнению с 512 ошибками страницы, чтобы обеспечить 2M. Когда одной ошибкой страницы может быть обеспечено 2M, достигается значительное повышение производительности.
По mmap существует по крайней мере одна заметная проблема.Для поддержки mmap может использоваться дескриптор файла канала.Ошибка не становится.Однако в адресе памяти данные из предоставленного канала не отображаются.
Однако, если используется MAP_ANONYMOUS, то из дескриптора файла канала в предоставленный адрес mmap данные могут быть прочитаны.Хотя не так эффективно, желаемый результат становится.По неудачному возврату lseek и ошибочно может быть идентифицирован дескриптор файла, прикрепленного к каналу.
На компьютерах, которые могут адресовать весь мегабайт и использовать операционную систему на основе диска, использование malloc необходимо.Если вы используете функцию getline из библиотеки C, то, вероятно, будут использоваться malloc и free.
В операционной системе с управлением ядром вместо mmap зачем использовать malloc?По сравнению с malloc;ММАП кажется сложным?Для вызова munmap необходимо также указать ранее запрошенное количество адресного пространства.использование malloc более переносимо?malloc кажется более удобным?
Тем не менее, если требуется производительность, тогда используется mmap.
Последнее, но не в последнюю очередь, если MAP_SHARED, то с процессами потомства можно обмениваться данными.Избегание pthreads имеет первостепенное значение.Иногда клонирования также можно избежать.
Хотя субъективные методы распределения переменных, перечисленные в наиболее и менее предпочтительных вариантах, следующие: register / stack;ММАП;Глобальный;таНос.К каждому относятся разные блага и изгнания.По достаточно сложной программе;используются три или, возможно, все четыре метода.