-
- Что ты прицепился к компилятору и его настройкам. Я просто в кач-ве
примера привел как
тыпрограммист может добиться невыровненного доступа к памяти: il-2(210 знак., 30.07.2023 15:38)- после такого приходится привыкать к memcpy :) - Vit(30.07.2023 15:59)
- memcpy тоже иногда лажает. Помнится с fk0 срались тут на эту тему. - LightElf(30.07.2023 20:07)
- Кстати да. У себя, при высокой оптимизации ARM GCC, видел, как
байтовый memcpy(), по факту, становится двухсловным. Просто потому,
что шла работа с массивом 32-битных значений. Nikolay_Po(373 знак., 30.07.2023 23:45)
- Как я понял, компилер пытается подложить самую оптимальную версию
memcpy основываясь на своём представлении о прекрасном. И иногда
эвристика слишком оптимистична. - LightElf(31.07.2023 00:14)
- Если не забыть расставить volatile, где требуется, проблем не
будет. Просто компиляторы становятся более совершенными и
оптимизируют больше, чем программист мог себе это представить, но
не больше, чем позволяет выбранный стандарт. - Nikolay_Po(31.07.2023 00:45)
- Не, там не в volatile дело было. Там именно компилятор терял
информацию о типе и делал неверные предположения о выровненности
указателя. LightElf(141 знак., 31.07.2023 01:14)
- "...компилятор терял информацию о типе и делал неверные
предположения о выровненности указателя" - думаю, что именно из-за
того, что указатель был слишком изменчив (слишком волатилен), за
пределами контекста секции кода. Nikolay_Po(27 знак., 31.07.2023 07:47)
- volatile - это совсем не про это - SciFi(31.07.2023 07:50)
- Не удивлюсь, что про всё. Оптимизации случаются весьма и весьма изощрённые. Если, в контексте, обычный указатель меняется только с шагом двойного слова, то компилятор имеет право считать указатель выровненным. И, если программист, не объявив указатель volatile, вне контекста, прирастит эту переменную на байт - жди беды. - Nikolay_Po(31.07.2023 07:54)
- volatile - это совсем не про это - SciFi(31.07.2023 07:50)
- "...компилятор терял информацию о типе и делал неверные
предположения о выровненности указателя" - думаю, что именно из-за
того, что указатель был слишком изменчив (слишком волатилен), за
пределами контекста секции кода. Nikolay_Po(27 знак., 31.07.2023 07:47)
- Не, там не в volatile дело было. Там именно компилятор терял
информацию о типе и делал неверные предположения о выровненности
указателя. LightElf(141 знак., 31.07.2023 01:14)
- Если не забыть расставить volatile, где требуется, проблем не
будет. Просто компиляторы становятся более совершенными и
оптимизируют больше, чем программист мог себе это представить, но
не больше, чем позволяет выбранный стандарт. - Nikolay_Po(31.07.2023 00:45)
- Как я понял, компилер пытается подложить самую оптимальную версию
memcpy основываясь на своём представлении о прекрасном. И иногда
эвристика слишком оптимистична. - LightElf(31.07.2023 00:14)
- обычно оно должно быть вылизано и оптимизировано. если такое подводит, то либо закат Солнца вручную, либо закидывать такой компилер подальше - Vit(30.07.2023 20:47)
- Кстати да. У себя, при высокой оптимизации ARM GCC, видел, как
байтовый memcpy(), по факту, становится двухсловным. Просто потому,
что шла работа с массивом 32-битных значений. Nikolay_Po(373 знак., 30.07.2023 23:45)
- memcpy тоже иногда лажает. Помнится с fk0 срались тут на эту тему. - LightElf(30.07.2023 20:07)
- после такого приходится привыкать к memcpy :) - Vit(30.07.2023 15:59)
- Что ты прицепился к компилятору и его настройкам. Я просто в кач-ве
примера привел как