Как стать автором
Обновить
128.9

C *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Максимально точное измерение кода

Время на прочтение6 мин
Количество просмотров26K

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

В этом посте я опишу надежный метод «нанобенчмаркинга» с минимальной погрешностью и без подключения специальных библиотек и драйверов, к которому в итоге пришел. Применимость: сравнение однопоточного потенциала процессоров, просто интерес.
Читать дальше →
Всего голосов 32: ↑29 и ↓3+26
Комментарии36

Конфигурационные файлы. Библиотека libconfig

Время на прочтение8 мин
Количество просмотров40K

Введение


Как-то находясь в поиске как мне прикрутить конфигурационные ini файлы или json к моему сервачку перебирал варианты, но почему-то они были неудобны или слишком простые, или велосипеды. И хоть я люблю xml конфигурирование, но порою это чрезмерно огромные файлы и неудобно для небольшого количества настроек писать много текста. Раз задал другу вопрос по этой теме, он то мне и подкинул библиотеку. Напоминает она json в смеси с yaml.



Библиотека имеет два интерфейса: функциональный и объектный. Они очень похожи, так как объектный использует внутри функциональную реализацию, но имеют некоторые различия, рассмотренные в данном посте.

Читать дальше →
Всего голосов 20: ↑13 и ↓7+6
Комментарии10

Простые вещи. Файл настроек и небольшой прицеп утилит

Время на прочтение15 мин
Количество просмотров844
Этот пост, для тех, кто пишет на C[/C++]. Остальные могут не читать.

Как всегда, работая над проектами хочу поделится очередной технологией. Наверное, громко сказано. Скорее, простым решением в области создания и работы с файлом настройки программ.

В мире много готовых решений. От XML-формата до… Одним словом, много. Данная статья не претендует на что-то сверхновое, не побуждает к дискуссиям о стиле, методах и реализации.

Я, просто, делюсь быстрым решением, как читать параметры и значения, разделённые знаками «равно» из файла настроек формата, похожего на, скажем, php.ini

Перейдём, непосредственно, к решению.
Всего голосов 23: ↑12 и ↓11+1
Комментарии20

Qt + OpenCV. Новое устройство GigE интерфейса доступа к сетевым видеокамерам как CvCapture

Время на прочтение8 мин
Количество просмотров6.6K
Как говорил Генрих VIII очередной жене, — «Я вас долго не задержу...»
Пост — небольшое расширение предыдущей статьи «Qt + OpenCV. Runtime и Widget для CvCapture (устройства видеозахвата).»
Если вас, уважаемый читатель, угораздило приобрести видеокамеру, поддержка которой не обеспечена библиотекой OpenCV, а методы работы оной с изображениями ой как нужны, не следует расстраиваться.
Сперва изучим, что нам преподнесли, или что сами, несведующие, купили.
  1. Интерфейс GigE поддерживается SDK, лежащей в свободном доступе или поставленной совместно с товаром. Первый плюс!
  2. Документация более-менее осмыслена. Снова повезло!
  3. Примеры есть! Надо же… Плюс!

Итак, я стал «счастливчиком» по плюсикам этого списка, заполучив камеру Smartek Giganetix GC1921M
Методы SDK работают, но как-то так… Код частично закрыт. Уровень программиста стал понятен из фрагмента кода
...
if (m_selectedDevice->IsConnected()){
			m_disconnectAct->setEnabled(true);
			m_fwUpdateAct->setEnabled(true);
}
...

Если у вас возник вопрос, — «А что тут такого?», — я не смогу отправить вас на машине времени в советский вуз, где за это с вас снимут балл на экзамене. :)

Да, и ладно. Нам-то нужно, всего лишь, подключиться, принять поток и отключиться. Благо, примеры — на месте.
Теперь -- о главном.
Всего голосов 14: ↑9 и ↓5+4
Комментарии16

Истории

Маленькая C-функция из преисподней

Время на прочтение5 мин
Количество просмотров3.5K
Недавно мой студент и я пытались понять одну тонкость в стандарте C. Самый простой способ прояснить подобные вопросы — это узнать, учли ли её разработчики компиляторов, то есть написать код и посмотреть, что с ним будут делать разные компиляторы.

Я написал такую функцию:
int foo (char x) {
  char y = x;
  return ++x > y;
}

Так как ++x увеличивает на 1 значение x, очевидно, что функция должна возвращать "1" для большинства значений x. Вопрос состоит в том, что она вернет для значения CHAR_MAX?

Читать дальше →
Всего голосов 109: ↑98 и ↓11+87
Комментарии32

О производительности сетевых программ

Время на прочтение2 мин
Количество просмотров16K


Заключительная лекция курса «Сетевое программирование в UNIX», который подготовили специалисты SkyDNS и компании «Айдеко», получилась многогранной.

На лекции были рассмотрены две основных темы. Марк Коренберг («Айдеко») и Александр Патраков (SkyDNS) рассказали, как простыми модификациями можно ускорить работу цикла обработки событий и объяснили, как пользоваться флагом EPOLLET.
Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии0

Подсчет ссылок атомарными переменными в C/C++ и GCC

Время на прочтение7 мин
Количество просмотров7.1K
Автор: Alexander Sandler, оригинал статьи (27 мая 2009)

Введение


Допустим, у нас есть структура данных, которая управляет объектами и мы хотели бы работать с ней и объектами из двух или более потоков. Для достижения максимальной производительности мы должны различать механизм, использующийся для защиты самой структуры данных и механизм, использующийся для защиты актуальных объектов.
Читать дальше →
Всего голосов 30: ↑28 и ↓2+26
Комментарии20

Простой многопоточный тип доступа к данным и атомарные переменные

Время на прочтение6 мин
Количество просмотров20K
Автор: Alexander Sandler, оригинал статьи (23 декабря 2008)

Введение


В этой статье мне бы хотелось продолжить тему, начатую в моих предыдущих постах (см. ниже — прим. пер.). Вопрос, на который я попытаюсь ответить — что является наиболее эффективным и безопасным способом доступа к переменным простого типа данных из двух или более потоков. То есть, как изменить переменную из двух потоков одновременно, не нарушив ее значения.
Читать дальше →
Всего голосов 18: ↑17 и ↓1+16
Комментарии2

Мы не написали книгу! Практический опыт создания учебного пособия по программированию

Время на прочтение3 мин
Количество просмотров3.4K
Идею написать эту заметку подарила статья «Мы написали книгу! Практический опыт издания книги о программировании». Как и тот автор, я начала писать в начале года и закончила к середине апреля, работала примерно в том же объеме. Но произведение немного иного толка — учебное пособие по языку программирования C.

До этого у меня уже был опыт написания учебных материалов по программированию и другому в виде курсов и циклов занятий, был опыт обучения подростков программированию. Курс, который я писала на этот раз, в первую очередь предназначался гражданам, начиная лет с 14-15, уже знакомых с азами программирования посредством других языков.

Потребность в таком пособии назрела к началу декабря прошедшего учебного года. Декабрь ушел на просмотр существующей литературы и пособий по языку C. Не смотря на то, что среди просмотренного были достойные произведения, ни одно из них не подходило. Например, известное издание K&R, которое часто рекомендуют, не подходит для начинающих. Другие издания либо были объемны, либо не давали объективных знаний. Мне же нужно было пособие, рассчитанное не более чем на 30 пар (60 академ.часов).
Читать дальше →
Всего голосов 46: ↑39 и ↓7+32
Комментарии27

С11 исправит ошибки С99

Время на прочтение2 мин
Количество просмотров8.1K
В декабре 2011 года был утверждён стандарт ISO/IEC 9899:2011, он же C11 или C1X, новый стандарт для языка программирования C.

Дэнни Калев (Danny Kalev), бывший член комитета стандартизации C++, вкратце объясняет, в чём суть главных нововведений в C11: новая модель памяти для лучшей поддержки многопоточности, анонимные структуры и объединения и многие другие функции, которые уже присутствуют в C++.

Некоторые обязательные функции C99 становятся опциональными в C11 (массивы переменной длины, комплексный тип данных и др.), но добавляются некоторые функции C++. Комитеты C и C++ плотно сотрудничали, чтобы обеспечить максимальную совместимость языков.
Читать дальше →
Всего голосов 55: ↑43 и ↓12+31
Комментарии21

Как решить проблему 10 000 соединений?

Время на прочтение1 мин
Количество просмотров28K


Способы решения этой проблемы, поднятой еще в 2001 году программистом Дэном Кегелем, рассматриваются в девятой лекции курса «Сетевое программирование в UNIX», подготовленного специалистами SkyDNS и компании «Айдеко». За подробностями – добро пожаловать под кат.
Читать дальше →
Всего голосов 33: ↑30 и ↓3+27
Комментарии37

Как сделать программу нетерпеливой?

Время на прочтение1 мин
Количество просмотров11K


Программы, которые были написаны в прошлых лекциях курса «Сетевое программирование в UNIX», обладали бесконечным запасом терпения, то есть беспрекословно ждали, пока не поступят данные для обработки. В новой лекции вы узнаете, как ограничить терпение программы определенными временными рамками.
Читать дальше →
Всего голосов 30: ↑23 и ↓7+16
Комментарии6

Эффективное чтение

Время на прочтение1 мин
Количество просмотров11K


Настало время для седьмой лекции курса «Сетевое программирование в UNIX», подготовленного специалистами SkyDNS и компании «Айдеко». Автор курса Александр Патраков объясняет студентам, как ускорить чтение небольших порций данных из сокета.
Читать дальше →
Всего голосов 9: ↑5 и ↓4+1
Комментарии7

Ближайшие события

Асинхронные запросы к MySQL на API (libmysqlclient)

Время на прочтение3 мин
Количество просмотров6.5K
Так получается, что сейчас тружусь над планировщиком для MySQL соединений. И тут недавно пришлось покапаться в документации/блогах и т.д. И вот решил поделиться с сообществом как реализовать асинхронные запросы к MySQL серверу на С++ используя API и библиотеку libmysqlclient.

Читать дальше →
Всего голосов 24: ↑21 и ↓3+18
Комментарии46

Реализация разделяемой памяти между драйвером и приложением

Время на прочтение6 мин
Количество просмотров9.9K

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

Читать дальше →
Всего голосов 41: ↑39 и ↓2+37
Комментарии6

Использование сети CAN и стека CANopen

Время на прочтение6 мин
Количество просмотров43K
Однажды передо мной встала задача разработать встраиваемую систему, в которой бы данные могли передаваться между узлами c максимальной надежностью. Тогда то я впервые и узнал о CAN.

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

CAN (Controller Area Network) — это стандарт, созданный компанией Bosсh для сетей, используемых в автоматизации и промышленности. Стандарт нашел широкое применение в промышленном производстве, технологиях «умного дома», а так же в автомобилестроении. Очень хорошо подходит для связывания различных датчиков и управляющих устройств в единую сеть.
Как правило, CAN-сеть это сеть типа «шина», в которой все узлы могут передавать и принимать данные.
Она обладает небольшой скоростью, но высокой надежностью.

Далее я хочу поверхностно описать стандарт и рассказать об использовании такой сети на практике.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+22
Комментарии11

Многозадачность в микроконтроллерах на основе продолжений

Время на прочтение8 мин
Количество просмотров27K
Программисты C и так не избалованы возможностями языка, а разработчики встроенных систем на микроконтроллерах ограничены еще больше, зачастую их программы работают на голом железе, без поддержки ОС.
Возможность использования в С сопрограмм, генераторов, кооперативной многозадачности часто может сильно упростить программу и сэкономить силы, но эти возможности языка не очевидны и многие про них не знают.
Продолжения (contionuation) позволяют запомнить состояние выполнения программного потока (функции), и вернуться к этому месту в дальнейшем.
Используя продолжения, мы можем получить сопрограммы (coroutine), а это уже практически готовые генераторы, итераторы и кооперативная многозадачность.
Читать дальше →
Всего голосов 67: ↑66 и ↓1+65
Комментарии12

Итоги 20-го международного конкурса непонятного кода на C

Время на прочтение2 мин
Количество просмотров16K
Организаторы IOCCC (Международный конкурс на самый непонятный код C) нажали кнопку «турбо». Если результаты прошлого конкурса опубликовали спустя четыре года после проведения, теперь прошло всего два месяца — и вот они.

Участвовать в конкурсе могут готовые программы размером меньше 4096 байт, при этом количество значимых символов, без учёта пробелов, знаков табуляции и знаков ; ( ), не должно превышать 2048. Задачей конкурса является «проверять компиляторы на стресс, демонстрировать тонкости языка программирования Си и важность соблюдения стиля программирования (делая обратное)».
Читать дальше →
Всего голосов 52: ↑48 и ↓4+44
Комментарии29

Расставим точки над структурами C/C++

Время на прочтение4 мин
Количество просмотров268K
Недавно познакомился со структурами C/C++ — struct. Господи, да «что же с ними знакомиться» скажете вы? Тем самым вы допустите сразу 2 ошибки: во-первых я не Господи, а во вторых я тоже думал что структуры — они и в Африке структуры. А вот как оказалось и — нет. Я расскажу о нескольких жизненно-важных подробностях, которые кого-нибудь из читателей избавят от часовой отладки…


Читать дальше →
Всего голосов 125: ↑90 и ↓35+55
Комментарии82

Кросс-платформенные многопоточные приложения

Время на прочтение6 мин
Количество просмотров15K
Для создания переносимых многопоточных приложений предлагаю воспользоваться библиотекой Glib.
Glib — это достаточно большая кросс-платформенная библиотека, которая, кроме потоков, включает в себя поддержку интернационализации, работу со строками, массивами, файлами, таймерами, и много чего другого, вплоть до XML парсера и поддерки .ini конфигурационных файлов.
В тоже время эта библиотека достаточно маленькая и почти не имеет зависимостей, что позволяет без особых проблем включать её в Windows-проекты, а в unix-подобных системах Glib уже есть.
Читать дальше →
Всего голосов 32: ↑25 и ↓7+18
Комментарии61

Вклад авторов

Работа

Программист С
39 вакансий