2013-02-08 2 views
1

Я запускаю программу, которая выделяет 64 МБ в качестве общей памяти для связи IPC. pmap показывает, что выделен блок из 64 МБ. Тем не менее, «верх» показывает, что память RES для proc составляет около 40 МБ! Я заключаю, что общая память помечена как VIRT. Но почему? Там Linux все еще имеет более 1 ГБ оперативной памяти.Общая память, отмеченная как виртуальная память?

+0

Это * использование * все 64MB сразу? –

+0

В linux, если вы не являетесь ядром, или вы имеете дело с чем-то вроде аппаратного буфера кадров или чего-то еще, почти вся виртуальная память. – twalberg

ответ

1

Вы уже использовали какой-либо из этих 64MB? Linux откладывает выделение.

cf. Does malloc lazily create the backing pages for an allocation on Linux (and other platforms)?

+1

Ваша теория выглядит правильно! Я просто проверил тест, позволяя этому приложению получать сообщения с использованием куска разделяемой памяти, и наблюдал, что RES значительно возрастает, и VIRT остается почти таким же. – CCNA

+0

На самом деле это очень полезная функция, когда приложения предопределяют огромное количество памяти, на которой они никогда не будут. – mikebabcock

+0

Независимо от того, использует ли ОС ленивое выделение или нет, не связано с тем, что наблюдает ОП. Это было бы точно так же, когда ОС не выполняли ленивое распределение, например Solaris. – jlliagre

0

Linux не загружает всю память, процесс «получает» в ОЗУ, он загружает виртуальную память памяти в оперативную память только тогда, когда вы программируете этот блок памяти. Здесь «память» означает частный mem & общий mem оба. Я не делал никаких экспериментов, чтобы проверить это мнение, но я видел это во многих местах, таких как SO, и я этому верю. Просто FYI.

0

Общая память - это, как и большинство, если не все программы с памятью памяти, виртуальные. Только активные страницы должны быть сопоставлены с физическими (то есть резидентной памятью). По-другому было бы пустой тратой ресурсов.

Единственным исключением является то, что процесс специально блокирует страницы в ОЗУ с mlock.

Смежные вопросы