在C中,观察严格混叠会带来什么样的性能优势呢?
答案 0 :(得分:19)
有一个页面可以非常彻底地描述别名here。
总而言之,当两个不同类型的指针访问同一位置时,编译器不能假定数据的值(即它必须每次都读取该值,因此无法进行优化)。
只有在未强制执行严格别名时才会出现这种情况。严格的别名选项:
将此代码复制粘贴到main.c:
void f(unsigned u)
{
unsigned short* const bad = (unsigned short*)&u;
}
int main(void)
{
f(5);
return 0;
}
然后使用以下选项编译代码:
gcc main.c -Wall -O2
你会得到:
的main.c:3: 警告:解除引用类型惩罚 指针将破坏严格别名 规则
使用以下命令禁用别名
gcc main.c -fno-strict-aliasing -Wall -O2
警告消失了。 (或者只是取出-Wall但是......如果没有它就不能编译)
尽我所能,我无法让MSVC给我一个警告。