Я работаю над игровым проектом. В последнее время мы сталкиваемся с проблемой, которая вызывает тривиальное исключение «bad_alloc», когда мы загружаем / выгружаем разные сцены примерно три раза.
Каждый раз, когда мы загружаем сцену, мы сначала загружаем сжатую папку .zip в память, а затем извлекаем из нее игровые объекты. Поскольку у нас нет инструмента профилирования памяти, я просто использую график производительности Process Explorer, чтобы увидеть, что происходит:
- Запустите игру ==> ~ 620 МБ
- Загрузить первую сцену ==> ~ 1,1 ГБ
- Выгрузите его ==> ~ 620 МБ
- Загрузить 2-ую сцену ==> ~ 1,1 ГБ
- Выгрузите его ==> ~ 620 МБ
- Загрузить 3-ю сцену ==> bad_alloc
Я прослеживаю до нового оператора каждой загрузки. Загрузка сжатой папки стоит 100 ~ 120 МБ самой памяти, и bad_alloc выбрасывается из нее при 3-й загрузке.
На нашей платформе установлена физическая память объемом 2 ГБ. Похоже, мы ничего не оставили после разгрузки сцены. Каждая сжатая папка имеет примерно одинаковый размер. Однако новый оператор 3-й загрузки просто не работает.
Мне интересно, каков возможный смысл этого bad_alloc? Недостаточно памяти? или просто не можете выделить непрерывный блок требуемого размера? Если у него есть несколько возможностей, как я могу это определить?
Любая помощь приветствуется, спасибо!