Pull to refresh
0
0
Pushkoff @Pushkoff

C++ программист

Send message

Забавы с оператором switch

Reading time2 min
Views1.4K
Был у меня простой, рабочий код (я убрал лишнее оставил только суть):
typedef enum
  {
    enNone,
    enOne,
    enTwo,
    enThree
  }TEnum;

    switch(Enum)
      {
        case enNone:
             /*Ничего не делаем*/
             break;/*enNone*/
        case enOne:
             Value=f1(Value);
             Value=A*Value+B;
             break;/*enOne*/
        case enTwo:
             Value=f2(Value);
             Value=A*Value+B;
             break;/*enTwo*/
        case enThree:
             Value=f3(Value);
             Value=A*Value+B;
             break;/*enThree*/
      }/*SWITCH*/


Больших претензий к нему у меня не было, но решил его микрооптимизировать:
Читать дальше →
Total votes 13: ↑5 and ↓8-3
Comments9

Знакомство с библиотекой libevent на примере создания простейшего Web-сервера картинок

Reading time7 min
Views11K
В данной статье я покажу как используя библиотеку libevent, написать простейший Web-сервер, который будет по запросу клиентов выдавать файлы jpeg картинок.

Библиотека libevent предоставляет программистам доступ к кроссплатформенному асинхронному сетевому API. На основе данной библиотеки можно создавать высокопроизводительные сетевые приложения. Например, libevent используется в таких известных приложениях как Memcached (распределённая система кэширования) и TOR (распределённая анонимная сеть).

Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments10

GuruPlug Server — новая версия ультракомпактного Linux сервера размером с зарядное устройство

Reading time1 min
Views8K
image

Ранее на Хабре уже упоминались предшественники этого компактного компьютера (ссылка #1 и ссылка #2)
Более ранняя модель в линейке называется SheevaPlug и продаётся по цене 99$.
Разработчики из Marvell пошли дальше и на выставке CES2010 были анонсированы новые модели —
GuruPlug Server и GuruPlug Server — PLUS (с расширенным функционалом).
Модель GuruPlug Server дополнительно имеет:

2 x Gb Ethernet
2 x USB 2.0
1x eSATA @ 3Gb/s SATAII
1x MicroSD Slot)

В двух словах, GuruPlug Server – PLUS это ультракомпактный компьютер, размером с зарядное устройство для AAA аккумуляторов, однако внутри установлен 1,2 GHz процессор, 512 RAM, адаптер Wi-Fi 802.11b/g,
Bluetooth: 2.1 / EDR, также имеются два порта USB 2.0 и два Ethernet-разъема, кроме этого имеется возможность подключения устройств по интерфейсам eSATA и SATAII, а также встроенный слот для карт памяти microSD.
Читать дальше →
Total votes 101: ↑97 and ↓4+93
Comments171

Google Drive

Reading time2 min
Views7.5K
В официальном блоге Google появилось сообщение о предстоящем запуске новой возможности в сервисе Google Docs — «облачного» хранилища для больших файлов (до 250 МБ).
Замечу, что уже много лет ходят слухи о разработке подобного сервиса у Google, и многие гики даже дали ему название — Google Drive. Теперь введение похожей функции подтверждено официально.
Читать дальше →
Total votes 77: ↑71 and ↓6+65
Comments108

Обновление SkyDrive и как подключить SkyDrive в виде сетевого ресурса

Reading time2 min
Views41K
Недавно веб-интерфейс бесплатного облачного хранилища файлов Microsoft SkyDrive получил обновление. Этот ресурс по-прежнему предлагает 25 гигабайт бесплатного хранилища, однако в ходе обновления размер отдельного загружаемого файла теперь был увеличен с 50 мегабайт до 100 мегабайт.

Веб-интерфейс теперь использует новое представление для отображения папок и просмотра галереи изображений.

image image 

Кроме того заявлены следующие изменения:
  • закрепление сайта на панели задач через Internet Explorer 9
  • один и тот же интерфейс для всех типов файлов
  • новая панель информации о файле
  • новый просмотрщик фотографий
  • увеличена скорость работы ресурса
  • 100 мб лимит файлов
  • больше нет рекламы, убран баннер.
Но самое интересно, что теперь есть способ подключения вашего хранилища SkyDrive в качестве сетевого диска с полной поддержкой копирования, вставки, удаления, предпросмотра файлов. Пока для записи в хранилище поддерживаются офисные файлы. Остальные файлы можно загрузить через веб-интерфейс. Доступ к загруженным через веб-интерфейс файлам доступен для всех типов. Для того, чтобы подключить SkyDrive в качестве сетевого диска проделайте следующие шаги:
Читать дальше →
Total votes 80: ↑71 and ↓9+62
Comments59

Here be dragons: Управление памятью в Windows как оно есть [3/3]

Reading time5 min
Views147K

Каталог:
Один
Два
Три

μTorrent


Это, пожалуй, самая забавная часть. При очевидно высоких навыках программирования, авторы либо не читали, либо не поняли вот этот документ. Вот что происходит с дефолтными настройками:
Читать дальше →
Total votes 323: ↑300 and ↓23+277
Comments171

Here be dragons: Управление памятью в Windows как оно есть [2/3]

Reading time5 min
Views39K

Каталог:
Один
Два
Три

Оказывается длинные опусы нужно разбивать. А я то думал «многосерийные» топики публикуют исключительно для зарабатывания рейтинга :-)

Продолжу с места в карьер, так как где разбилось — там разбилось, а писать дополнительные введения к каждой серии выше моих сил.
Читать дальше →
Total votes 274: ↑251 and ↓23+228
Comments34

Here be dragons: Управление памятью в Windows как оно есть [1/3]

Reading time8 min
Views175K

Каталог:
Один
Два
Три

Менеджер памяти (и связанные с ним вопросы контроллера кеша, менеджера ввода/вывода и пр) — одна из вещей, в которой (наряду с медициной и политикой) «разбираются все». Но даже люди «изучившие винду досконально» нет-нет, да и начинают писать чепуху вроде (не говоря уже о другой чепухе, написанной там же):
Грамотная работа с памятью!!! За все время использования у меня своп файл не увеличился ни на Килобайт. По этому Фаерфокс с 10-20 окнами сворачивается / разворачивается в/из трея как пуля. Такого эффекта я на винде добивался с отключенным свопом и с переносом tmp файлов на RAM диск.

Или к примеру μTorrent — у меня нет никаких оснований сомневаться в компетентности его авторов, но вот про работу памяти в Windows они со всей очевидностью знают мало. Не забываем и товарищей, производящих софт для слежения за производительностью и не имеющих ни малейшего понятия об управлении памятью в Windows (и поднявших по этому поводу истерику на пол интернета, на Ars-е даже был разбор полетов). Но самое потрясающее, что я видел всвязи с управлением памятью — это совет переместить pagefile на RAM-диск:
Из моих трех гигабайт под RAM disk был выделен один (на тот момент, когда на лаптопе еще была установлена XP), на котором я создал своп на 768МБ ...

Цель данной статьи — не полное описание работы менеджера памяти (не хватит ни места ни опыта), а попытка пролить хоть немного света на темное царство мифов и суеверий, окружающих вопросы управления памятью в Windows.
Читать дальше →
Total votes 360: ↑338 and ↓22+316
Comments85

6 отстойных слов в вашем резюме

Reading time4 min
Views83K
Эта статья – часть серии «Как написать резюме». Чтобы начать серию сначала, прочитайте введение.

За свою жизнь, я использовал несколько плохих слов. Даю %^й на отсечение, что вы тоже делали это. Но, когда неправильные слова появляются у вас в резюме – это делает его отстойным.
Читать дальше →
Total votes 182: ↑153 and ↓29+124
Comments109

Альтернативные аллокаторы памяти

Reading time13 min
Views88K
Написал Стивен Тови в 2:29 утра по программированию (шутка юмора Google Translate)
Вступление от себя: эта заметка, прорекламированная Алёной C++, предназначена в основном разработчикам игр для консолей, но будет, наверное, полезна и всем, кому приходится сталкиваться с экстремальным аллоцированием динамической памяти. Возможно, любители посравнивать управление памятью в C++ и Java тоже найдут над чем задуматься.

Оригинал с небезынтересной дискуссией в комментариях: altdevblogaday.org/2011/02/12/alternatives-to-malloc-and-new


Обязательная вступительная басня

Мне очень нравятся суши. Это вкусно и удобно. Мне нравится, что можно с бухты-барахты, не тратя целый обеденный час, зайти в суши-ресторан с конвейером, занять место и взять что-то свежее и вкусное с ленты. Но при всём при этом, чего мне реально не хотелось бы, так это быть официантом в суши-ресторане, особенно если бы моей обязанностью было бы рассаживать посетителей по местам.

Сейчас объясню, почему...
Total votes 75: ↑72 and ↓3+69
Comments59

C++ и reflection на коленке

Reading time6 min
Views914
Потребовалось тут недавно иметь возможность обращаться к полю в структуре по её имени — записать, прочитать значение. И так, чтобы производительность тех мест, где это не используется не изменилась.
Вот что получилось:
Copy Source | Copy HTML
  1. TUser user;
  2. user.StoreValue();
  3. double SalaryRef;
  4. user.SetField("Salary", SalaryRef); // сохранили 
  5. user.GetField("Salary", SalaryRef); // загрузили - передача по ссылке
  6.  
  7. // можно ещё и так, но сами понимаете - не удобно
  8. double Salary = user.GetField<double>("Salary");


Весь секрет в «волшебных пузырьках» — в классе от которого наследуется TUser, и одной функции — StoreValue().
Подробности под катом.

Важно: Данное решение кросплатформенно, требует только STL и компилятора C++, который «умеет» шаблоны.

Читать дальше →
Total votes 17: ↑8 and ↓9-1
Comments30

EFI Byte Code и операции с памятью

Reading time4 min
Views5.2K
Как известно, использование виртуальных машин, работа которых строится на программной интерпретации кода, позволяет создавать универсальные приложения, выполняемые на различных аппаратных платформах без рекомпиляции. Технология EFI Byte Code является типичным примером успешного применения данного подхода. Но при всех его преимуществах есть очевидный недостаток – программно реализованный процессор существенно медленнее аппаратного. В предлагаемой статье рассматривается метод, позволяющий нивелировать падение производительности EBC-программ на примере операций заполнения блока памяти константой и копирования содержимого блока памяти. Причем, об использовании «вставок» нативного кода центрального процессора речь не идет, поскольку это дискредитирует саму идею кроссплатформенности.
Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments0

Вышла первая версия модуля интеграции Cppcheck в Visual Studio с открытым кодом

Reading time1 min
Views9.7K
Здравствуйте, с вами снова говорит редактор блога ABBYY. На днях ко мне пришли разработчики и принесли с необъятных просторов ГитХаба новость, которая не имеет прямого отношения к нашей компании, но, по их словам, порадует всех наших разработчиков, а заодно и многих не наших. Коллегам они уже рассказали на кухне, для остальных — этот пост.

Продолжаем стихийный сериал о статическом анализе кода на C++ (предыдущие серии: один, два, три, четыре, пять, шесть, семь). Бесплатный анализатор с открытым кодом Cppcheck до недавнего времени отличался фатальным недостатком – не было модуля для его интеграции в Visual Studio.
NO MOAR!
Total votes 52: ↑47 and ↓5+42
Comments14

Оптимизация перебора поверхностей, составленных из треугольников

Reading time4 min
Views10K

Встала задача перебрать все возможные варианты «триангуляций». Это «склейки» из N треугольников, которые подчиняются простым правилам:
  1. Соприкасаться треугольники могут только по ребру
  2. Одно ребро может быть общим только у двух треугольников, не больше


Например, из трёх треугольников уникальных вариантов может быть всего два:
[[A B C], [A B D], [A C D]]
[[A B C], [A B D], [A C E]]

При том, что всего вариантов склеек 120. Мне удалось неплохо оптимизировать процесс перебора, который позволил просчитать почти все варианты вплоть до N = 11, но это всё равно очень мало.
Я расскажу как оптимизировал, может быть у уважаемой публики появятся идеи как этот процесс еще ускорить.
Читать дальше →
Total votes 19: ↑17 and ↓2+15
Comments79

Lock-free структуры данных. Основы: Модель памяти

Reading time18 min
Views94K

В предыдущей статье мы заглянули внутрь процессора, пусть и гипотетического. Мы выяснили, что для корректного выполнения параллельного кода процессору необходимо подсказывать, до каких пределов ему разрешено проводить свои внутренние оптимизации чтения/записи. Эти подсказки – барьеры памяти. Барьеры памяти позволяют в той или иной мере упорядочить обращения к памяти (точнее, кэшу, — процессор взаимодействует с внешним миром только через кэш). “Тяжесть” такого упорядочения может быть разной, — каждая архитектура может предоставлять целый набор барьеров “на выбор”. Используя те или иные барьеры памяти, мы можем построить разные модели памяти — набор гарантий, которые будут выполняться для наших программ.

В этой статье мы рассмотрим модель памяти C++11.
Читать дальше →
Total votes 72: ↑69 and ↓3+66
Comments8

Эмулятор x86 на JavaScript

Reading time1 min
Views37K
Virtual x86 — еще один эмулятор платформы x86 на языке программирования JavaScript. Как и JSLinux от Фабриса Беллара, для запуска Linux здесь достаточно только браузера. После загрузки образа нормально работают все встроенные команды Linux, работают компилированные программы, файловая система и проч., хотя сетевых интерфейсов пока нет.


Читать дальше →
Total votes 100: ↑91 and ↓9+82
Comments43

Скорости разработки и исполнения, не достижимые на С

Reading time20 min
Views58K
В продолжении статьи о кроссплатформенной и кросс-аппаратной оптимизации, на примере задачи поиска полным проходом по таблице из 5 полей и 10 000 000 строк, и неизбежности этой задачи даже при индексном поиске, я покажу как ускорить такой поиск в 3.5-5.3 раза с использованием C++ независимо от аппаратной платформы.
В предыдущей статье нам удалось ускорить поиск в 1.3 раза: GitHub.com
Мы не будем банально описывать конструкции языка, а покажем преимущества C++ при решении одного из этапов реальной задачи.
Мы по-прежнему пишем кроссплатформенно под MSVC11(MSVS2012) и GCC 4.7.2, и используем в них C и частично реализованный стандарт C++11.
Для упрощения понимания мы все ещё пишем без индексного поиска, но это решение в дальнейшем будет использоваться при индексном поиске.
Читать дальше →
Total votes 165: ↑150 and ↓15+135
Comments41

Механизм атомарного коммита в SQLite

Reading time23 min
Views29K
Эта статья — частичный перевод одной интересной статьи с sqlite.org, в которой подробно рассматривается реализация транзакций в SQLite. На самом деле я очень редко работаю с SQLite, но тем не менее мне очень понравилось это чтиво. Поэтому если хотите просто развить кругозор — будет интересно почитать. Первые две секции не включены в перевод, так как там нет ничего интересного, да и мне лень их набивать (пост и так огромный).

3.0 Однофайловый коммит

Мы начнём с обзора шагов, которые SQLite предпринимает, чтобы совершить атомарный коммит транзакции, которая затрагивает только один файл базы данных. Детали формата файлов, которые используются для защиты от повреждения БД и техники, которые применяются для коммита в несколько БД будут показаны ниже.

3.1 Начальное состояние


Состояние системы, когда соединение с БД только что было поднято, поверхностно изображено на рисунке справа. Справа показана информация, которая хранится на энерго-независимом носителе. Каждый прямоугольник — это сектор. Синий цвет говорит о том, что этот сектор содержит оригинальные данные. Посередине изображён дисковый кеш операционной системы. В самом начале нашего примера кеш холодный, это изображено белым цветом. На левой части рисунка — содержимое оперативной памяти процесса, который использует SQLite. Соединение с БД только что было открыто, и никакой информации прочитано не было.

Читать дальше →
Total votes 80: ↑79 and ↓1+78
Comments5

Алгоритм поиска пути Jump Point Search

Reading time6 min
Views123K
Этот алгоритм является улучшенным алгоритмом поиска пути A*. JPS ускоряет поиск пути, “перепрыгивая” многие места, которые должны быть просмотрены.  В отличие от подобных алгоритмов JPS не требует предварительной обработки и дополнительных затрат памяти. Данный алгоритм представлен в 2011 году, а в 2012 получил высокие отклики. Что из себя представляет данный алгоритм и его реализацию можно прочитать дальше в статье.


Читать дальше →
Total votes 110: ↑108 and ↓2+106
Comments37

Подделываем вашу подпись при помощи шарнирного механизма. Теорема Кемпе

Reading time5 min
Views221K
В этом посте я расскажу про программу, которая подделывает любую подпись при помощи шарнирного механизма. Программа основана на теореме Кемпе, доказанной в середине 19-го века.

Читать дальше →
Total votes 388: ↑382 and ↓6+376
Comments125

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity