Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемОльга Торопова
1 Останавливаем утечки памяти
2 Основная идея Выделение памяти должно быть под контролем – нужен свой инструмент. Инструмент будет показывать статистику выделения памяти по файлам и файлам/строчкам. Мы будем выделять и освобождать память так, чтобы инструмент знал об этом.
3 Инструмент Shift-S – выводит в лог информацию о выделенной памяти в текущий момент и сохраняет информацию о выделенной памяти на данный момент. Alt-M, Ctrl-M – выводят информацию о выделении памяти по файлам и файлам/строчкам. Если нажимался Shift-S, то выводится и разница по объему выделенной памяти относительно запомненного момента.
4 Alt-M
5 Ctrl-M
6 Подключение инструмента к С++ В stdafx.h проекта добавляем #define MEMORY_PROFILING1 #include "MemoryProfilerCreate.h К проекту подключаем DLL-библиотеку nmemoryprofiler. Если дефайн закомментировать, статистика по проекту собираться не будет. ВНИМАНИЕ! Статистика работает даже в Release- конфигурации, её сбор может быть медленнным. Комментируйте дефайн до выкладки.
7 Выделение памяти Вместо float* a = new float float* a = MP_NEW(float) Вместо С3DObject* a = new С3DObject(); С3DObject* a = MP_NEW(C3DObject); Вместо float* a = new float[100]; float* a = MP_NEW_ARR(float, 100);
8 Выделение памяти Вместо С3DObject* a = new С3DObject(10); MP_NEW_P(a, C3DObject, 10); Вместо С3DObject* a = new С3DObject(1, 2); MP_NEW_P2(a, C3DObject, 1, 2); Вместо С3DObject* a; а = new С3DObject(1, 2); С3DObject* a; MP_NEW_V2(a, C3DObject, 1, 2);
9 Освобождение памяти Вместо delete a; MP_DELETE(a);// после a = NULL Вместо delete[] a; MP_DELETE_ARR(a); // после a = NULL Вместо delete this; MP_DELETE_THIS; Вместо delete GetTexture(); MP_DELETE_UNSAFE(GetTexture()); Вместо delete[] GetData(); MP_DELETE_ARR_UNSAFE(GetData());
10 Как избежать ошибок? Удаления вида new/delete[] и new[]/delete отслеживаются. Будет assert. Когда память где-то удалилась, а по тому же указателю выделяется новая область память, тоже отслеживается. Будет assert. Перед ассертом, нужная информация сбрасывается в лог.
11 ВОПРОСЫ?
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.