Проверьте с помощью file
и ldd
, что ваш исполняемый файл действительно 64-битный.
Проверьте также ограничения ресурсов.Внутри процесса вы можете использовать системный вызов getrlimit (и setrlimit
, чтобы изменить их, когда это возможно).Из оболочки bash
попробуйте ulimit -a
.Из оболочки zsh
попробуйте limit
.
Проверьте также, что ваш процесс действительно потребляет память, которую, как вы полагаете, он потребляет.Если его pid 1234, вы можете попробовать pmap 1234
.Изнутри процесса вы можете прочитать /proc/self/maps
или /proc/1234/maps
(которые вы можете прочитать из терминала).В вашем /proc/self/
...
также есть /proc/self/smaps
или /proc/1234/smaps
и /proc/self/status
или /proc/1234/status
и другие файлы. Проверьте с помощью free
, что у вас есть память (и своп)космос) ты веришь.Вы можете добавить некоторое временное пространство подкачки с помощью swapon /tmp/someswapfile
(и использовать mkswap
для его инициализации).
Несколько месяцев (и несколько лет назад) я обычно мог запускать процесс 7Gb(огромная cc1
компиляция), под Gnu / Linux / Debian / Sid / AMD64, на машине с 8 ГБ ОЗУ.
И вы можете попробовать с крошечной тестовой программой, которая, например, выделяется с malloc
несколько блоков памяти, например, 32 МБ каждый.Не забудьте написать несколько байтов внутри (по крайней мере, на каждый мегабайт).
стандартные контейнеры C ++, такие как std::map
или std::vector
, по слухам, занимают больше памяти, чем мы обычно думаем.
Купите больше оперативной памяти, если это необходимо.Это довольно дешево в наши дни.