Как стать автором
Обновить
78
0
Василий Тицкий @qehgt

Пользователь

Отправить сообщение
Вспомнилась фраза «Бывает лечение хуже болезни».
4. В программе всегда есть баг

Ну что ж так фатально-то.

К примеру, сколько багов содержит «Hello, World!» на любимом языке программирования?
Алгоритм такой — «идти вслед за рынком». Когда начинаются массовые распродажи, программа тоже начинает работать в этом направлении («если акции падают, лучше сейчас продать, пока цена не упала ещё больше»).

Система с положительной обратной связью.
1) "__gc" — это старый синтаксис, его уже давно не рекомендуется использовать.
2) Есть такой проект SWIG, сильно помогает, когда есть связи C#, Java, python ...-> C++
www.coranac.com/documents/bittrick/
Пункт 2.4 Branchless min/max

Т.е. можно сделать за 0 сравнений. Это трюк в чистом виде, программировать так надо очень-очень редко, но для общего развития знать надо.
Я как-то для GoldED'а программку написал — vcity. Она показывала, из какого города человек пишет.
Исходное выражение (x ^= y ^= x ^= y; да и i = ++i + ++i; ) приводит к undefined behavior.

Результатом может являться всё, что угодно. Жёсткий диск, например, отформатировать. Или занести мусор в значения x и y.

Иногда результатом undefined behavior является тот результат, которого ожидает программист — «правильные» значения в переменных.
Он и в C/C++ не работает.

Почему не работает — это про sequence points читать надо.
ManualResetEventSlim при невозможности захватить ресурс просто некоторое (короткое) время продолжает делать это в цикле. Если и тогда не получается — тогда нить засыпает и ждёт, когда её разбудит ядро.

Поведение, аналогичное функциям InitializeCriticalSection и InitializeCriticalSectionAndSpinCount из WinAPI.

Выгода тут в том, что вход/выход в режим ядра — это очень долгая (в сравнении с этим небольшим циклом) операция.
Настырный какой!

www.ti.com/litv/pdf/spru034h — платформа TMS320C3x/C4x, таблица 3-1
Все типы (кроме long double) — 32-бита.

Там же, прямым текстом: «A TMS320C3x/C4x Byte Is 32 Bits»
Вот платформа SPARC от Analog Devices: www.analog.com/static/imported-files/software_manuals/50_21k_cc_man.rev1.2.pdf

Таблица 1-13, «Data Type and Data Type Sizes». Размер всех типов (за исключением long double) — 32 bits, возвращаемое sizeof значение — 1.

У TI должно быть что-то похожее, но я что-то сейчас не смог найти.
Всё, что здесь написано, одинаково что для C, что для С++. Модель памяти в этих языках не имеет отличий.
«The sizeof operator yields the size (in bytes) », всё верно, но тут тонкость в том, что этот самый «byte» определяется в пункте 1.7 Стандарта, и там нигде нет ограничения на размер этого byte'а сверху.

На той платформе, где sizeof(int)==1, этот самый byte — 32-битная величина. Меньше процессор просто не умеет.

Особенно интересно на этой платформе выглядели работа со строками и чтение файлов.
Да я про это и собирался писать изначально.

Но как рассказать про #pragma pack, не рассказав перед этим, что такое вообще выравнивание и на что именно оно влияет?
Хорошо, пусть так.

Но: в релизе на вход функции могут подать не отсортированный массив? Если да — функция, получается, вернёт мусор?
У assert'ов есть несколько проблем в дизайне: во-первых, они выполняют проверки только в Debug-режиме (молчаливо подразумевая, что в Release проверок делать не надо), во-вторых, стандартное поведение assert'ов — это вызов функции abort(), которая остановит приложение. Это редко где бывает допустимо.
Многих, но отнюдь не всех.

Темплейты и функторы помогают компилятору гораздо эффективней делать оптимизацию. Классический пример — qsort() в plain С vs std::sort() из С++
12 ...
33

Информация

В рейтинге
Не участвует
Откуда
Richmond Hill, Ontario, Канада
Дата рождения
Зарегистрирован
Активность