Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Методы оптимизации памяти

65K
08 июля 2011 года
FiloXSee
18 / / 01.07.2011
Написал статью по оптимизации памяти в программах на С++. Ее можно почитать тут:
http://itw66.ru/blog/c_plus_plus/491.html

А какие методы вы можете предложить по повышению эффективности программы, при помощи организации данных в памяти определенным образом?
5
08 июля 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: FiloXSee

А какие методы вы можете предложить по повышению эффективности программы, при помощи организации данных в памяти определенным образом?

Использовать сборщик мусора. :)

240
08 июля 2011 года
aks
2.5K / / 14.07.2006
Кстати на текущей работе нужен фактически реалтайм и поэтому пришлось делать свой менеджер памяти со строго константным временем доступа к блокам памяти и возможностью туда класть данный из ядра напрямую с драйверов. =)
9
08 июля 2011 года
Lerkin
3.0K / / 25.03.2003
Не, ну это общая методика. Тут всё уже больше 20 лет понятно, и не раз описывалось. А вот как быть с учетом времени жизни объектов в памяти? Что с "умными" указателями? Вы же на примере некоего графического движка рассказываете? Так самое основное в таких системах - учет загружаемых (или генерируемых) ресурсов для отображения.
Желателен обзорный пример маленького "менеджера памяти" - с выделением, освобождением и прочими штуками, и, если хотите "ближе к телу", то и взаимодействие его с.. ну, назовем это "менеджер ресурсов", хотя это и некорректно.
240
08 июля 2011 года
aks
2.5K / / 14.07.2006
Это к кому кстати вопрос? =)
9
08 июля 2011 года
Lerkin
3.0K / / 25.03.2003
Цитата: aks
Это к кому кстати вопрос? =)


К виновнику торжества))) aks, братишка, к тебе другие вопросы будут)

260
08 июля 2011 года
Ramon
1.1K / / 16.08.2003
Пара вопросов к автору:

Цитата:
Получение данных из памяти идет блоком в 64 байта. Это значит что нельзя получить меньше. Когда вы идете по коллекции объектов, то при получении первого объекта, получаются 64 байта начиная с первого байта объекта (это не всегда так, но в данном случае это не важно).



- Из какой памяти идет получение данных?
- Для какой платформы магические цифры?

Цитата:
Если все объекты будут последовательно лежать в памяти, то при обращении ко второму объекту данные уже будут в кэше процессора и будет начата работа с ними. Если же объекты будут разбросаны в памяти, то при обращение к каждому из них придется заново обращаться к оперативной памяти.

Обращение к L1 — 20 тактов.
Обращение к L2 — 100 тактов.
Обращение к общей памяти — 600 тактов.



- Откуда взяты и сии магические цифры?
- Что значат L1 / L2 и как сии кэши влияют на все остальное?

PS: В общем снова по боянным вершкам пробежались.

9
08 июля 2011 года
Lerkin
3.0K / / 25.03.2003
Я вот тут почитал топик. Многое стало ясно. А я тут про менеджер памяти и прочие шняги, Ramon - за уровни кеша и виды памяти, а ТС совсем слаб даже по вопросам своей статьи.

Цитата:
Массивы объектов - это чаще всего массивы указатели на классы.


Цитата:
ООП - это хорошо для бизнесс логики.

65K
10 июля 2011 года
FiloXSee
18 / / 01.07.2011
Цитата: Lerkin
Не, ну это общая методика. Тут всё уже больше 20 лет понятно, и не раз описывалось. А вот как быть с учетом времени жизни объектов в памяти? Что с "умными" указателями? Вы же на примере некоего графического движка рассказываете? Так самое основное в таких системах - учет загружаемых (или генерируемых) ресурсов для отображения.
Желателен обзорный пример маленького "менеджера памяти" - с выделением, освобождением и прочими штуками, и, если хотите "ближе к телу", то и взаимодействие его с.. ну, назовем это "менеджер ресурсов", хотя это и некорректно.


Это тянет на полноценную статью (может и не одну). Когда напишу, опубликую ссылки. В любом случае это будет на сайте http://itw66.ru, так что подписывайтесь, если заинтересовало.

65K
10 июля 2011 года
FiloXSee
18 / / 01.07.2011
Цитата: Ramon
Из какой памяти идет получение данных?


Из оперативной памяти.

Цитата: Ramon
Что значат L1 / L2 и как сии кэши влияют на все остальное?


L1 и L2 - это кэши процессора. L1 - это самая быстрая до которой может добраться процессор. L2 медленнее, ну а оперативная память так вообще очень медленная (сравнительно конечно).

Цитата: Ramon
Откуда взяты и сии магические цифры?


Это цифры в тактах процессора для процессоров Intel возможно 2-х или 3-х летней давности. Смысл этих цифр в том, что явно видно на сколько различные типы памяти разные по скорости. Даже если на другой платформе сами цифры будут другие, но их соотношение в целом будет такое же.

Смысл в том, что в алгоритмах, где идет интенсивная работа с данными, доступ к памяти может сыграть лимитирующую роль и скорость работы программы будет ограничена именно доступом к памяти, а не вычислительными возможностями процессора. Поэтому в таких случаях нужно следить за тем, как данные располагаются в памяти и как к ним осуществляется доступ. Порой можно значительно ускорить работу алгоритма просто изменив расположение данных в памяти.

260
10 июля 2011 года
Ramon
1.1K / / 16.08.2003
А как на все влияют размер и структура кэшей, предвыборка и иже с ними?

PS: Ваша первая цифра зовется кэш-линейкой.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог