The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"GCC удалён из основного состава FreeBSD "
Отправлено n80, 05-Мрт-20 14:13 
> 1) "большой" - аж 16 байтов :)

Достаточно большую, чтобы нельзя было сделать одним-двумя mov (или mov + str).

> 2) Если static const сказать, это и воркэраундит такую "оптимизацию" и делает код меньше.

Так ведь это изменение меняет семантику, а компилятор не может оптимизировать в нарушение стандарта, делает строго по документации. Я же, надеюсь, не надо объяснять в чём разница между static и обычными локальными переменными (и что в C слово const работает не так хорошо, как хотелось бы, «спасибо» любителям использовать UB и требовать обратной совместимости)? Так что если там действительно совсем константа, конечно нужно было сразу указывать static const, всегда так делаю.

> 3) Я по-моему очень доходчиво -ffreestanding сказал, и дополнительно подкрепил nostdlib,
> no-builtin, nostartfiles и проч, потому что совершенно не желаю чтобы мне
> в мою фирмвару пытались поумничать через мою голову на кривой козе.

Эх, человек. Со своим инструментом надо если не дружить, то хотя бы сотрудничать на взаимовыгодных условиях. А не сражаться. Не надо так.
То что операции + и * компилятор всё равно реализует — не смущает? Так и нечего тогда переизобретать велосипед. Если всё написано правильно, никакое из этих (документированных!) явлений код раздувать не будет. И сам не будешь тратить время и усилия на велосипедостроение там, где достаточно было почитать документацию. А то сначала думают что умнее, а потом оказывается что в одном месте оптимизировали, а в другом потеряли куда больше из-за того что некогда было подумать над выбором типов, добавлением static и const в нужных местах, алгоритмическими оптимизациями и т.д.

>> to supply the memcmp, memcpy, memmove, and memset functions,
> ...и в принципе это катит, но с LTO эта скотина умудряется дополнительно
> поумничать, а потом таки сказать undefined reference, даже если я его
> и заимплементил, блин :))). И да, нет там никакого libgcc в
> baremetal тулчейн. И вообще, последнее что я хочу видеть в микроконтроллере
> это какой-то левый код впертый мне без спросу на кривой козе.

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

Со всякими mem* функциями вообще весело, где-то их выгоднее вызовом сделать, а где-то даже не заинлайнить, а заменить специфичными именно для этого места инструкциями. Но, насколько понимаю, когда отключаются builtins, такая оптимизация уже не будет работать, конечно.

В общем, сражаться с инструментом — заведомо плохая идея и если есть ощущение что сражаешься, надо читать доку, обычно окажется что решение куда проще, чем казалось, да ещё и тому есть неиллюзорные причины.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру