Почему моя программа на c внезапно использует 30 г виртуальной памяти?

Вверху я заметил, что моя программа c (использующая CUDA 3.2) имеет виртуальный размер 28g или более (если посмотреть на VIRT) при каждом запуске с самого начала. Для меня это не имеет никакого смысла. Резидентная память имеет смысл и составляет всего около 2 ГБ на моем самом большом наборе данных. Я знаю, что в какой-то момент в прошлом виртуальный размер был не таким большим, но я не уверен, когда произошло это изменение.

Почему мой процесс будет использовать 28 г виртуальной памяти (или почему VIRT у вершины будет таким большим)? Я понимаю, что VIRT включает исполняемый двоичный файл (всего 437 КБ), разделяемые библиотеки и «область данных». Что такое «область данных»? Как я могу узнать, сколько памяти требуется разделяемым библиотекам? А как насчет других элементов общей памяти моего процесса?

содержимое / proc / / smaps (1022 строки) здесь: http://pastebin.com/fTJJneXr

Одна из записей из smaps покажите, что одна из них составляет БОЛЬШУЮ из них, но не имеет ярлыка ... как я могу узнать, что это за "пустая" запись с 28 ГБ?

200000000-900000000 ---p 00000000 00:00 0 
Size:           29360128 kB
Rss:                   0 kB
Pss:                   0 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:         0 kB
Referenced:            0 kB
Anonymous:             0 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB

-

ubuntu 11.04 64-бит
16 ГБ ОЗУ

13
задан jmilloy 22 June 2011 в 19:41
поделиться