понедельник, июня 29, 2015

Фрагментация памяти в C++ приложениях

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

Чем это плохо? Во-первых, память может внезапно закончиться. Во-вторых может просесть производительность. Вот тут можно почитать историю как это выглядит на практике: Out of memory

Вот тут с картинками написано как оно происходит: Holier Than Thou
Но не написано - а что с этим делать-то? Итак, с чем я работала.

Region-based memory management. Выделяем память большим куском, например, под уровень в игре.  Популярный термин для такого куска - "арена". Потом уже внутри этого куска создаем нужные нам объекты. Когда все это стало не нужно - весь кусок памяти освобождаем. Заодно с утечками памяти проблем меньше.
Арену можно использовать вместе с STL, см. "STL custom allocators".


Boost.Pool. Там есть несколько разных интерфейсов, я использовала object_pool, который помогает эффективнее создавать и удалять большое количество сравнительно маленьких объектов.

Также я видела разное креативное использование placement new, как правило его можно заменить Boost.Pool'ом.

среда, мая 13, 2015

"Марсианин" на русском языке

Пока писала пост про книги по С++11 обнаружила, что "Марсианин" Энди Вейера переведен на русский. Это отличная бодрая научная фантастика, пока не встречала человека, которому он бы не понравился.

В оригинале - "The Martian".

суббота, мая 09, 2015

Хорошие книги по С++11

Я сейчас в работе активно использую фичи C++11 и C++14, чего и вам рекомендую. Вот вам отличные книги по новыму стандарту.

Самая лучшая книга по C++11 и C++14. Просто, понятно с примерами. Для тех, кто знает С++ и хочет использовать фичи нового стандарта. На русский, похоже, не переведена
В переводе "Параллельное программирование на С++ в действии. Практика разработки многопоточных программ"
С фокусом на многопоточность, которой раньше в стандарте не было. Если душит жаба эту книгу покупать, то написана она на основе вот этих статьей Уильямса: Multithreading in C++0x Series
В переводе "Стандартная библиотека C++. Справочное руководство"
Джоссатис обновил свою книгу про STL. Много букв. Очень много букв. Выискивать там куски, относящиеся именно к C++11, смысла не имеет. Многопоточность, правда, вынесена в отдельную главу, но по многопоточности лучше Уильямса почитать.
Поэтому рекомендую эту книгу тем, кто решил начинать изучать STL. Обратите внимание на издание, вам нужно второе издание, там на обложке крупно написано С++11.
Вообще это относится ко всем книгам по С++. То, что издано до 2012 года можно считать устаревшим.

Про качество переводов ничего сказать не могу.

Ссылки по теме:
Хорошие книги по С++

суббота, января 24, 2015

Юбилей подкрался незаметно

Десять лет назад я написала первый пост в этот блог. Не ожидала, что он продержится так долго.
После рождения дочки я стала писать сюда несколько реже. Ну вы, наверное, заметили. Моя активность сместилась в Твиттер. https://twitter.com/alenacpp

Другие социальные сети где я есть
http://instagram.com/alenacpp/ - я ни разу не фотограф, но поддалась всеобщей моде
http://facebook.com/alenacpp - использую для чтения Facebook'а, также туда идет трансляция из твиттера. В друзья добавляю тех, кого читаю.