Мое приложение (C ++ на Sol 10 — 32 бит) упало, и размер ядра, сгенерированного приложением, составляет 4 ГБ. Могу ли я предположить, что приложение может использовать память до 4 ГБ (так же, как размер основного файла), когда оно собирается аварийно завершить работу? PS. Мое приложение автономно и не зависит от каких-либо других процессов.
Есть ли способ проверить общий объем памяти, используемый приложением, с файлом core?
Да, файл ядра представляет собой дамп всей области виртуальной памяти, используемой процессом в момент сбоя. Вы не можете иметь более 4 ГБ основного файла с 32-разрядными процессами.
В Solaris вы можете использовать несколько команд, расположенных в / usr / proc / bin, для получения информации из файла ядра, в частности:
Помимо прочего, вы можете ограничить набор данных, сохраняемых в основном файле, с помощью команды coreadm. По умолчанию все сохраняется (стек + куча + шм + исм + дисм + текст + данные + родата + анон + шанон + ctf).
Из справочной страницы (http://linux.die.net/man/5/core):
Действие определенных сигналов по умолчанию — заставить процесс завершиться и создать файл дампа ядра, файл на диске, содержащий образ памяти процесса во время завершения.
Возможно, ваш код использует многопоточную среду и общие данные.
Также:
Начиная с ядра 2.6.23, специфичный для Linux файл / proc / PID / coredump_filter может использоваться для управления тем, какие сегменты памяти записываются в файл дампа ядра в случае, если дамп ядра выполняется для процесса с соответствующим идентификатором процесса.
Возможно, благодаря этому вы сможете узнать объем памяти, используемой приложением.