Я запускаю программу, которая выделяет 64 МБ в качестве общей памяти для связи IPC. pmap показывает, что выделен блок из 64 МБ. Тем не менее, «верх» показывает, что память RES для proc составляет около 40 МБ! Я заключаю, что общая память помечена как VIRT. Но почему? Там Linux все еще имеет более 1 ГБ оперативной памяти.Общая память, отмеченная как виртуальная память?
ответ
Вы уже использовали какой-либо из этих 64MB? Linux откладывает выделение.
cf. Does malloc lazily create the backing pages for an allocation on Linux (and other platforms)?
Ваша теория выглядит правильно! Я просто проверил тест, позволяя этому приложению получать сообщения с использованием куска разделяемой памяти, и наблюдал, что RES значительно возрастает, и VIRT остается почти таким же. – CCNA
На самом деле это очень полезная функция, когда приложения предопределяют огромное количество памяти, на которой они никогда не будут. – mikebabcock
Независимо от того, использует ли ОС ленивое выделение или нет, не связано с тем, что наблюдает ОП. Это было бы точно так же, когда ОС не выполняли ленивое распределение, например Solaris. – jlliagre
Linux не загружает всю память, процесс «получает» в ОЗУ, он загружает виртуальную память памяти в оперативную память только тогда, когда вы программируете этот блок памяти. Здесь «память» означает частный mem & общий mem оба. Я не делал никаких экспериментов, чтобы проверить это мнение, но я видел это во многих местах, таких как SO, и я этому верю. Просто FYI.
Общая память - это, как и большинство, если не все программы с памятью памяти, виртуальные. Только активные страницы должны быть сопоставлены с физическими (то есть резидентной памятью). По-другому было бы пустой тратой ресурсов.
Единственным исключением является то, что процесс специально блокирует страницы в ОЗУ с mlock
.
- 1. Что такое "отмеченная память"?
- 2. Одиночная ценность Общая память/свободная память Свободная память/общая память
- 3. Виртуальная память
- 4. виртуальная память исчерпана: не удается выделить память
- 5. psutil виртуальная память единиц измерения?
- 6. Memcached и виртуальная память
- 7. gdb: исчерпана виртуальная память
- 8. Виртуальная память и sbrk
- 9. Указатели и виртуальная память
- 10. Операционные системы Виртуальная память
- 11. Виртуальная память на Linux
- 12. Fortran: недостаточная виртуальная память
- 13. Виртуальная память бесконечна?
- 14. cc1plus: виртуальная память исчерпана
- 15. связывание, загрузка и виртуальная память
- 16. Как вычисляется виртуальная память в Spark?
- 17. Общая память Linux
- 18. общая память и константы
- 19. Общая память с докером
- 20. Общая память + каталоги POSIX
- 21. Постоянная общая память GPU
- 22. , где распределяется общая память?
- 23. Общая память устройства UWP
- 24. Windows-защищенная общая память
- 25. cuda общая память перезаписывается?
- 26. общая память STL-карты
- 27. Общая память - матричное отображение
- 28. Форки и общая память
- 29. Общая память в mpi4py
- 30. Общая память между потоками
Это * использование * все 64MB сразу? –
В linux, если вы не являетесь ядром, или вы имеете дело с чем-то вроде аппаратного буфера кадров или чего-то еще, почти вся виртуальная память. – twalberg