Троллейбус из буханки или alias analysis в LLVM
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай!, а то все сломаешь!». Новичок и не трогает.
В докладе была сделана попытка заглянуть под капот компилятора и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема была рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» был центральным.
В докладе вы найдете:
- Код Quake3
- Магическую константу 0×5F3759DF
- Много ассемблера
- Много IR кода LLVM
- Rust, Java и даже Fortran
Поэтому прошу вас концентрироваться на докладе, а не на моей печальной физиономии
Комментарии (5)
24 июля 2016 в 16:16
+2↑
↓
можно будет потом в текстовом виде это узреть?24 июля 2016 в 16:43 (комментарий был изменён)
0↑
↓
Да, конечно. Я давно хотел оформить эту тему в виде статьи, но последние 4 месяца писал код вывода типов для llst.Я планирую оформить очередную статью про llst по результатам работы, добавив к ней материалы из февральского доклада.
24 июля 2016 в 16:53 (комментарий был изменён)
+1↑
↓
Пока могу предложить только слайды в виде pdf.
24 июля 2016 в 17:51
0↑
↓
Если очень очень очень коротко:float as_float (int* p_i) {
float * p_f = (float*) p_i;
return *p_f;
}этот код, скомпилированный без -fno-strict-aliasing, приводит к неопределенному поведению, так как компилятор имеет право считать, что p_f и p_i никогда не указывают на одну и ту же область памяти.
24 июля 2016 в 17:52
0↑
↓
Совершенно верно. Этой теме был посвящен отдельный доклад, о котором я уже писал на Хабре.