Я использую программу на C++ в Ubuntu 10.04 (32-битная системная архитектура). Если я вычисляю объем памяти, который использует моя программа, она достигает 800 МБ. У меня есть 4 ГБ оперативной памяти на месте. Но еще до того, как программа завершит работу, она выдает исключение нехватки памяти. Почему это происходит? Это из-за структуры памяти или проблем с реализацией или что может вызвать эту проблему? Я видел эту проблему довольно много раз прежде, но никогда не понимал причину этого. Кто-нибудь из вас занимался этим делом раньше?

Обновить:

Программа, которую я пытаюсь запустить, здесь с пояснениями. Чтобы увеличить объем используемой памяти, я просто увеличиваю значение max_i в основной функции.

2 ответа2

0

Нам нужно больше информации. Похоже, вы проводите эксперимент, который клевый, но что на самом деле делает программа.

Вы выделяете тысячи маленьких кусочков памяти или несколько больших непрерывных кусков и т. Д ...

Вопрос граничит со стекировкой пригодности IMO.

Как и другие парни, вы предполагаете, что вы находитесь в 32-битной среде, и ваш процесс вполне может изо всех сил выделить большой кусок в одном обращении. Но я просто размышляю без подробностей.

0

Вещи, которые могут пойти не так:

  • Система не может дать вам X байтов памяти. Допустим, вам нужен блок объемом 512 МБ, но система не может найти такой большой, конусообразный блок. Тогда вам не повезло, и вы получите исключение "нехватка памяти"

  • Вы просчитываете объем памяти, который фактически необходим вашей программе. Вы освобождаете неиспользуемую память? Вы правильно рассчитали накладные расходы для некоторых структур (выравнивание ключевых слов)?

  • У вас есть достаточно большой файл подкачки, чтобы система могла поменять другие процессы?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .