Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, Mr.Delphist, Вы писали:
MD>>2) работа с non-aligned адресами может быть либо хуже с точки зрения перфоманса, либо просто невозможна на данной машинной архитектуре
PD>О каком align может идти речь при работе с байтами ? Для них alignment вроде как всегда 1 ?
Мы все уже привыкли к тому, что байт является минимальной аппаратно адресуемой единицей на всех распространённых CPU, но если говорить о кросс-платформе "по гамбургскому счёту", то я бы не стал упускать из вида всякие хитровывернутые микроконтроллеры, у которых минимально адресуемым может быть WORD или DWORD (проще блок доступа к памяти, меньше заморочек с кешем и т.п.).
IRO>и
IRO>когда идет каст на uint8_t * а не через юнион
Это бессмысленно — лучше оптимизировать это компилятор не сможет, а вот хуже — запросто. Вариант с rol будет либо такой же, либо чуть лучше. Так что используйте либо битфилд, либо только требуемые битовые операции .
IRO>>и
IRO>>когда идет каст на uint8_t * а не через юнион
AS>Это бессмысленно — лучше оптимизировать это компилятор не сможет, а вот хуже — запросто. Вариант с rol будет либо такой же, либо чуть лучше. Так что используйте либо битфилд, либо только требуемые битовые операции .
Мы как всегда отошли от темы топика, если честно изначально меня не интересовало "самое быстрое".
А факт того что по указателю будет медленней чем арифметически. Или даже могут быть проблемы с align или еще какими прелестями. Вот основной посыл который я услышал из всего топика — только то что есть проблемы endian и что компилятор — не будет оптимизировать. с endian понятно, но мой оппонент говорит что в его жизни нету и не будет других кроме как little. А вот "отказ оптимизатора" это весомый аргумент.
Здравствуйте, Pavel Dvorkin, Вы писали:
MD>>2) работа с non-aligned адресами может быть либо хуже с точки зрения перфоманса, либо просто невозможна на данной машинной архитектуре PD>О каком align может идти речь при работе с байтами ? Для них alignment вроде как всегда 1 ?
Не всякая аппаратура умеет адресовать части слов...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Andrew S, Вы писали:
AS>Это бессмысленно — лучше оптимизировать это компилятор не сможет, а вот хуже — запросто. Вариант с rol будет либо такой же, либо чуть лучше. Так что используйте либо битфилд, либо только требуемые битовые операции .
Битфилд тоже стрёмно, так как переносимых гарантий раскладки полей по битам нет...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, IROV.., Вы писали:
IRO>Мы как всегда отошли от темы топика, если честно изначально меня не интересовало "самое быстрое".
А какое интересовало? В чём критерий хорошести решений?
И если самое быстрое не интересовало, то почему отказ от оптимизации -- аргумент?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, VladFein, Вы писали:
VF>Какие FF? VF>0xFFFF00AA ? VF>0xFFFF00AA ?
А какая разница?
Меня смутило ещё и то, что не ясно что делать, если там не AA, а что-то другое, 66, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
IRO>>как правильней делать? IRO>>преобразовать к uint8_t * и свапнуть 0 и 2 элемент. IRO>>либо делать
F>явный union и выглядит наиболее "канонично": F>
AS>>Это бессмысленно — лучше оптимизировать это компилятор не сможет, а вот хуже — запросто. Вариант с rol будет либо такой же, либо чуть лучше. Так что используйте либо битфилд, либо только требуемые битовые операции .
E>Битфилд тоже стрёмно, так как переносимых гарантий раскладки полей по битам нет...
Скажем так, по опыту это не менее переносимо, чем битовые операции. И как минимум ровно так же эффективно.
Здравствуйте, VladFein, Вы писали:
VF>Здравствуйте, IROV.., Вы писали:
IRO>>есть
IRO>>
IRO>>uint32_t color = 0xFFFF00AA;
IRO>>
IRO>>нужно поменять FF и AA местами
VF>Похоже, меня одного смутила неопределённость вопроса: VF>Какие FF? VF>0xFFFF00AA ? VF>0xFFFF00AA ? VF>0xFFFF00AA ?
согласен, не корректно.
Но если прочитать вопрос целиком, а не частями то станет ясно что не важно что с чем. А важно как!? и точнее даже не как, а с намеком на то "а не будет ли плохо делать это через указатели" я специально не хотел точную формулировку. Хотел услышать более расширенное мнение людей по данному поводу.
Узнал что бест-практик все таки битовые операции.
VF>Из разговора о uint8_t как бы понятно, что НЕ средний вариант.
не уловил замечание по поводу uint8_t