Поскольку памятью в С++ приложении программист управляет самостоятельно, то и за фрагментацией памяти приходится следить самим. Память фрагментируется, если приложение работает достаточно долго и при этом активно работает с памятью. Не такая редкая проблема. Я это видела в играх, игрок бегает, юнитов убивает, локации меняет, надо под это память выделять и потом освобождать. И в высоконагруженных системах, запросы приходят, надо под них память выделять, потом освобождать.
Чем это плохо? Во-первых, память может внезапно закончиться. Во-вторых может просесть производительность. Вот тут можно почитать историю как это выглядит на практике: Out of memory
Вот тут с картинками написано как оно происходит: Holier Than Thou
Но не написано - а что с этим делать-то? Итак, с чем я работала.
Region-based memory management. Выделяем память большим куском, например, под уровень в игре. Популярный термин для такого куска - "арена". Потом уже внутри этого куска создаем нужные нам объекты. Когда все это стало не нужно - весь кусок памяти освобождаем. Заодно с утечками памяти проблем меньше.
Арену можно использовать вместе с STL, см. "STL custom allocators".
Boost.Pool. Там есть несколько разных интерфейсов, я использовала object_pool, который помогает эффективнее создавать и удалять большое количество сравнительно маленьких объектов.
Также я видела разное креативное использование placement new, как правило его можно заменить Boost.Pool'ом.
понедельник, июня 29, 2015
Фрагментация памяти в C++ приложениях
Категории: cpp, gamedev, programming
среда, ноября 19, 2014
Обзор книги A Tour of C++
Прочитала новую книгу Страуструпа "A Tour of C++". Это очень краткое введение в С++11. Рекомендуется новичкам, которые уже умеют программировать на каком-то языке. Но мне такая рекомендация не нравится, потому что книга уж очень лаконичная. Она подойдет скорее человеку, который когда-то писал на С++, подзабыл, а сейчас надо срочно вспомнить и заодно понять чего нового появилось за прошедшее время.
Если вы на C++ пишете все время и в курсе изменений в C++11, то ничего нового вы там не найдете.
Категории: books, cpp, programming
среда, ноября 21, 2012
Статья Storage Layout of Polymorphic Objects
Начинающим С++ программистам часто бывает непонятно каким образом и где хранятся виртуальные функции. Статья Storage Layout of Polymorphic Objects рассказ в картинках о том, как будут размещены поля и виртуальные функции объекта, рекомендую.
via Code_Analysis
Категории: cpp, programming
вторник, октября 30, 2012
Статья про сортировку 1 миллиона чисел с ограничением по памяти
На Stack Overflow кто-то сформулировал следующую задачу: по сети приходят восьмизначные числа. Их приходит миллион штук, их надо отсортировать и переслать дальше. Проблема в том, что устройство, на которое они приходят - это компьютер с 1 Мб оперативной памяти. И это вся память что есть, жесткого диска нет. Короче говоря, реализовать сортировку по-тупому не получится, ибо не лезет.
Вот здесь описано решение этой задачи 1MB Sorting Explained. Подход выбран следующий: числа накапливать и сортировать кусками. Отсортированную последовательность хранить в пожатом виде.
Категории: programming
понедельник, июля 09, 2012
Отказ амазоновского облака 29-го июня
29 июня, это пятница вечер, в Северной Вирджинии штормило. Что привело к проблемам с электричеством в датацентрах Амазона. Переход на резервное питание прошел не очень гладко, поэтому некоторые американские сервисы, которые используют амазоновское облако, либо не работали вообще, либо работали с перебоями. Среди этих сервисов были Netflix, Instagram и много-много других поменьше. Пользователи расстроились, потому что пятница вечер, хочется фильмов и фоток, а тут ничего не работает.
После этих печальных событий Амазон написал отчет на тему "что это было?". Summary of the AWS Service Event in the US East Region
Netflix написал свой отчет: Lessons Netflix Learned from the AWS Storm
А Дмитрий Самовский проанализировал отчет Амазона Applying 5 Whys to Amazon EC2 Outage
Ссылки по теме:
Отказ Windows Azure 29-го февраля
Перевод статьи Summary of the Amazon EC2 and Amazon RDS Service Disruption in the US East Region
Категории: programming
понедельник, июня 18, 2012
Интервью Алексея Пахунова на OpenQuality.ru
Хорошее интервью и название правильное: Нужно дело делать, а не языком трепаться
В послужном списке Алексея Пахунова, известного как «Not a kernel guy», более семи лет работы в трех подразделениях Microsoft (Office, OSD и MSR), участие в двух крупных проектах (Axapta и Windows) и нескольких мелких. Текущее место работы – Google. Низкоуровневая разработка, “серьезность” разработчика, тестирование Windows и Chrome, “шерифы” в Google, TDD “по-взрослому”, время-качество-деньги, импровизация как причина авралов – вот некоторые темы нашей беседы.
Категории: interview, microsoft, programming
понедельник, июня 04, 2012
Статья Hash Functions for C++ Unordered Containers
И еще одна интересная проблема из переписки. С ней сталкиваются все, кто более-менее серьезно пытается использовать хэш-контейнеры в С++.
Итак, вы пытаетесь положить свой класс в, скажем, unordered_map. И получаете сообщение об ошибке примерно такого вида:
cannot convert from 'const Name' to 'size_t'
Это крайне невразумительное сообщение об ошибке означает, что вы должны определить хэш-функцию для своего класса, чтобы можно было его использовать с данным контейнером.О том как это сделать есть хорошая подробная статья Hash Functions for C++ Unordered Containers.
Пример оттуда с самым простым способом определить хэш-функцию
//
// This program uses a simple user-defined function
// to provide a hash function for use in unordered_map
//
// Compile this example with Visual Studio 2010
// or g++ 4.5 using -std=c++0x
//
#include <iostream>
#include <unordered_map>
#include <string>
#include <functional>
using namespace std;
typedef pair<string,string> Name;
size_t name_hash( const Name & name )
{
return hash<string>()(name.first) ^ hash<string>()(name.second);
}
int main(int argc, char* argv[])
{
unordered_map<Name,int,decltype(&name_hash)> ids(100, name_hash );
ids[Name("Mark", "Nelson")] = 40561;
ids[Name("Andrew","Binstock")] = 40562;
for ( auto ii = ids.begin() ; ii != ids.end() ; ii++ )
cout << ii->first.first
<< " "
<< ii->first.second
<< " : "
<< ii->second
<< endl;
return 0;
}
Категории: cpp, programming
четверг, апреля 19, 2012
Исходники Принца Персии
ТОГО Принца Персии. Конечно ассемблер.
Prince-of-Persia-Apple-II
* auto
DemoDisk = 0
org = $5400
tr on
lst off
*-------------------------------
*
* PRINCE OF PERSIA
* Copyright 1989 Jordan Mechner
*
*-------------------------------
org org
jmp AUTOCTRL
jmp CHECKSTRIKE
jmp CHECKSTAB
jmp AUTOPLAYBACK
jmp CUTCHECK
Категории: programming
воскресенье, марта 18, 2012
Книга Programming Interviews Exposed
Народ периодически спрашивает про книжки для подготовки к интервью. Мой мудрый бородатый коллега посоветовал книгу
Programming Interviews Exposed: Secrets to Landing Your Next Job. Посмотрела ее по диагонали - достойная книга, могу рекомендовать. Хорошо подойдет тем, кто ищет свою первую работу, а если не первую, то кое-какие вещи тоже будет полезно освежить в памяти.
Обложка только у нее странная, напоминает фильм Office Space.
Updated 8.5.2015: Это старое издание, уже есть новое.
Старое издание можно купить на Озоне здесь.
Категории: books, programming
суббота, марта 17, 2012
Отказ Windows Azure 29-го февраля
The three truths of cloud computing are: hardware fails, software has bugs and people make mistakes.
29-го февраля были серьезные перебои в работе Windows Azure. Вызваны они были багой в коде, работающим с датами, то есть понятно почему именно 29 февраля.
Вот тут подробный постмортем: Summary of Windows Azure Service Disruption on Feb 29th, 2012
Также там есть немного об архитектуре Azure.
Здесь статья на High Scalability: The Azure Outage: Time Is a SPOF, Leap Day Doubly So
Ссылки по теме:
Перевод статьи Summary of the Amazon EC2 and Amazon RDS Service Disruption in the US East Region
Категории: programming
вторник, марта 06, 2012
Бесплатные тесты по С++ на Brainbench
Brainbench предлагает бесплатные тесты по C++, С#, Яве, Питону. Обычно такая щедрость длится недолго.
(Brainbench - известный ресурс, предлагающий такое тестирование. Результаты тестов иногда признаются работодателями. Сами тесты хороши, чтобы набить руку перед собеседованием)
Ссылка на страницу с регистрацией.
via Boris Rozenshteyn
Категории: programming
суббота, января 14, 2012
Статья "Notes On Scalability"
В статье Notes on Scalability сформулированы пять принципов построения масштабируемых систем. Я привожу краткий перевод, по ссылке все подробнее и интереснее.
1. Build it to Break.
Что бы вы ни разрабатывали, оно сломается. Будьте к этому готовы.
2. Everything is a Feature
Ваше приложение - это набор решений и компромиссов.
3. Scale Out, Not Up
Хорошо, когда проблемы масштабирования можно решить добавлением серверов.
4. Buy More Storage
Много маленьких дисков обычно быстрее одного здорового.
5.You’re Going to Do It Wrong
Вы ошибетесь. Будьте готовы переписывать свой код и пробовать новые идеи.
По ссылке с highscalability.
Категории: programming
пятница, января 06, 2012
CodeFlow - тулза для code review
Обещают нашу внутреннюю тулзу для code review включить в следующий релиз Visual Studio. Статья об этом:
A Bar, an Idea, and a Garage: The Story of CodeFlow
CodeFlow - прекрасная вещь, вся из себя интуитивно понятная, рекомедую. Мы ей пользуемся и довольны.
Категории: programming
четверг, декабря 29, 2011
The Art Of Programming — Выпуск №70 [ Drinking ] / Готовимся к новому году с alenaCPP
Поучаствовала в новогоднем подкасте The Art Of Programming. Душевно пообщались с golodnyj.
Категории: me, programming
среда, ноября 23, 2011
Опубликованы исходники Doom 3
Помните, Кармак обещал опубликовать исходники Doom 3 после выхода Rage? Он свое слово держит: Doom 3 GPL source release/*
===========================================================================
Doom 3 GPL Source Code
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
Это только исходники, без данных. Данные можно взять из самой игры.
Из-за юридических проблем ему пришлось убрать оттуда кусок кода, известный как Carmack's Reverse.
Должно компиляться под Win32, Linux и MacOS.
Написано на С++, но это скорее похоже на С с классами - голые указатели, сишные массивы.
Как это обычно бывает, не все доведено до идеального состояния.qglDisableClientState( GL_NORMAL_ARRAY );
qglDisable( GL_FRAGMENT_PROGRAM_ARB );
qglDisable( GL_VERTEX_PROGRAM_ARB );
// Fixme: Hack to get around an apparent bug in ATI drivers. Should remove as soon as it gets fixed.
qglBindProgramARB( GL_VERTEX_PROGRAM_ARB, 0 );
Как видно из кода, для отрисовки используется OpenGL. Почему-то в readme написано, что нужен DirectX. Непонятно. DirectX нужен для DirectInput.
Подменив данные и слегка поменяв код можно написать 3D-шутер своей мечты :-).
Категории: cpp, gamedev, programming
четверг, октября 13, 2011
Пост Stevey's Google Platforms Rant
Стив Йеги (я надеюсь, это произносится именно так), который работает в Гугле, случайно опубликовал в открытом доступе свою статью со сравнением API Амазона и Гугла, хвалит там SOA. Ну а также там есть немного сплетен о всяких их внутренних делах.
Эта статья стала хитом среди разработчиков, все о ней пишут, все ретвитят. В итоге статью решили из открытого доступа не убирать. Вот она: Stevey's Google Platforms Rant. Много букв.
...Amazon had transformed culturally into a company that thinks about everything in a services-first fashion. It is now fundamental to how they approach all designs, including internal designs for stuff that might never see the light of day externally.
Категории: programming
понедельник, октября 10, 2011
Бесплатный онлайн-курс по машинному обучению
Стэнфордский университет предлагает бесплатный онлайн-курс по очень модному сегодня направлению - машинному обучению: Stanford Machine Learning class. Всё на английском, есть субтитры.
Туда входят видеолекции, вопросы по каждому разделу и упражнения, в которых надо будет писать код. Есть форум где можно задавать вопросы.
Я начала смотреть, мне нравится.
Категории: programming
понедельник, августа 22, 2011
Восемь заблуждений о распределенных вычислениях
В 1994 Питер Дейч сформулировал семь заблуждений о распределенных вычислениях, позже, в 1997, Джеймс Гослинг добавил восьмое. Это типичные ошибки, которые допускают специалисты - новички в разработке распределенных систем.
В википедии об этих заблуждениях есть статья Fallacies of Distributed Computing с ссылками на подробные объяснения. А я, как обычно, изложу их покороче.
- Сеть надежна
Всё время что-то ломается. Электричество выключается, сетевые провода обрываются, софт глючит. - Латентность нулевая
Даже если пропускная способность вашей сети большая, ей нужно какое-то время, чтобы раскочегариться. Поэтому ваше прекрасное плавное AJAX приложение надо тестировать не только в корпоративной сетке. - Пропускная способность бесконечна
Несмотря на то, что пропускная способность растет очень быстро, мы всегда найдем, чем ее загрузить: богатые интерфейсы, IP-телефония и интересные видео высокого качества. - Сеть безопасна
Хакеры не дремлют! Повсюду малварь и DDOS атаки. - Топология никогда не меняется
Появляются новые устройства, отключаются старые. В случае мобильных устройств топология меняется постоянно. Так что никогда не стоит думать, что передаваемые данные всегда будут ходить одним и тем же путем. - Администратор всегда только один
Когда в разработке задействованы больше чем одна компания, а проблема где-то на стыке, решить ее бывает несколько сложнее. - Цена передачи данных нулевая
Компьютеры, роутеры, пропускная способность и люди, которые это все обслуживают, стоят денег. - Сеть однородна
В сети работают устройства с разными операционными системами, все время появляются новые - тут опять можно вспомнить про мобильные устройства.
Категории: programming
пятница, августа 12, 2011
Выступление Джона Кармака на QuakeCon 2011
Джон Кармак как обычно выступал на QuakeCon, вот видеозапись его выступления.
Расшифровку я не нашла, похоже ее пока нет.
Для тех, кто не готов слушать его полтора часа, коротенький пересказ:
Много говорил про мегатекстурирование в Rage и вообще про Rage. Как Rage получился ему нравится.
Говорил про статический анализ кода, говорит, что это вещь и надо им пользоваться. Хвалил майкрософтовский статический анализатор кода и вообще: "Microsoft Research has a lot of really smart people and they do a lot of work covering a lot of different areas."
Этот анализатор идет в комплекте с тулзами под XBOX 360, поэтому "если вы разрабатываете под 360 и не используете статический анализ, то вы совершаете ошибку.
Также упомянул PVS-studio.
Иногда ему хочется перейти на функциональные языки программирования. На Haskell, например. Но он считает, что тут будут проблемы с прозводительностью, а также с обучением и наймом людей. Поэтому остаемся с С и С++.
Ему 40 лет, ему нравится программировать и у него отлично получается. Лучше чем когда бы то ни было. (Тут сразу вспоминаются мифы про то, что программировать после 30 невозможно.)
Ну и самое главное - Код Doom 3 будет открыт в этом году. (!)
Вопросы и ответы после его выступления:
Ссылки по теме:
Твиттер Кармака
Rage и Tech5
Выступление Джона Кармака на QuakeCon 2008
Перевод выступления Кармака на Quakecon 2004
Категории: gamedev, programming
вторник, июля 12, 2011
Статья "Девушки, которые выбирают программирование"
Написала статью для developers.org.ua про ситуацию с привлечением девушек в IT.
Девушки, которые выбирают программирование.
Она породила немного флейма.
Категории: me, programming

Atom feed