Я запускаю программу C++ в Ubuntu 10.04 (32-разрядная архитектура системы). Если я вычисляю объем памяти, который использует моя программа, это подходит к 800 МБ. Я имею в распоряжении 4 ГБ RAM. Но все еще прежде чем программа даже заканчивается, она бросает из исключения памяти. Почему это происходит? Это из-за структуры памяти или проблем реализации или что могло возможно инициировать эту проблему? Я имел замеченный это проблемное множество времен прежде, но никогда не понимал причины позади него. Какой-либо из Вас обработал этот случай прежде?
Обновление:
Программа, которую я пытаюсь запустить, здесь с объяснением. Для увеличения объема памяти, я использую I просто icrease значение max_i
в основной функции.
Вещи, которые могли пойти не так, как надо:
Система не может дать Вам X байты contineous памяти. Позволяет говорят, что Вы хотите блок 512 МБ, но система не может найти такое большое, contineous блок. Затем Вы не повезли и доберетесь "из памяти" исключение
Вы неверно рассчитываете объем памяти, в котором на самом деле нужна Ваша программа. Действительно ли Вы освобождаете неиспользованную память? Вы вычисляли издержки для некоторых структур (выравнивание ключевого слова) правильно?
У Вас есть достаточно большой своп-файл, таким образом, система может выгрузить другие процессы?
Нам нужно больше информации. Кажется на выполнение эксперимента, который прохладен, но что на самом деле делает программа.
Вы выделяете тысячи маленьких блоков памяти или несколько больших непрерывных блоков и т.д...
Вопрос граничит с stackoverflow пригодностью IMO.
Поскольку другие парни предполагают, что Вы находитесь в среде на 32 бита, и Ваш процесс мог изо всех сил пытаться выделить большой блок в одном хите. Но, я просто размышляю без большего количества деталей.