ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
3 мая
1020682 Топик полностью
fk0, легенда (24.07.2020 16:56, просмотров: 776) ответил RxTx на Ты написал в прошлом сообщении (цитирую твои слова): "а с некой абстрактной моделью вычислительной машины заданной СТАНДАРТОМ ЯЗЫКА". Ты выражение "стандарт языка" понимаешь как-то не так как все люди? Какие еще "оптимизаторы", какие "кодогенераторы" в стандарте языка C? Вот я тебя и прошу подтвердить твою же фразу. Мне еще в 2-3х сообщениях требовать с тебя цитату из стандарта? Или не будем валять дурака, и ты уже все понял, что по стандарту языка C прав именно
Баг в GCC, а не в Clang и вообще совершенно про противоположное, мол нет оптимизации. Остального не понял -- научись выражать мысли на понятном языке. Гудвин не прав, т.к. при использовании стандартных же любых конструкций языка (без упакованных структур) "баг" воспроизвести невозможно. А то, что он воспроизводится при использовании упакованных структур совершенно естесственно, и кстати в баге gcc есть на это комментарий (см. ссылку) -- вот так проблему можно обойти. Какие 

кодогенераторы: в процессе генерации кода (промежуточного 3-адресного, ассемблерного) из исходника на C/C++ генерируемый код зависит от типа. Что тут ещё непонятного. В C++ шаблоны могут по разному раскрываться для разных типов, есть argument dependent lookup, для арифметических операций генерируется разный код в зависимости от типа, разные типы по разному передаются в аргументы функции... Оптимизатор уже работает с внутренним представлением, оно там в виде дерева операций, например, во внутреннем коде. Эти операции уже сгенерированы в зависимости от типа как надо и от типа ничего не зависит, работает некая абстрактная машина. Но сама информация о типе, о его выравнивании, достаётся оптимизатором чтобы выбрать какую версию memcpy вызвать. Вот и вся хитрость. То, что кто-то там считал про memcpy никакого значения не имеет. В рамках абстракций введённых в стандарте упакованные структуры невозможны и никаких проблем не возникает. Они возникают только в рамках кривых нестандартных полумер (полумер потому, что упаковку самого объекта структуры сделали, а про то что сделать с типами лежащими внутри -- совершенно не продумано).


Обход проблемы:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50417#c26


Причём здесь я? Если ты решил меня пообсуждать -- сразу идёшь нахуй.

[ZX]