首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

严格别名规则“-fstrict-aliasing”和“-fno-strict-aliasing”及类型双关

“-fstrict-aliasing”表示启用严格别名规则,“-fno-strict-aliasing”表示禁用严格别名规则,当gcc的编译优化参数为“-O2”、“-O3”和“-Os”时,默认会打开...“-fstrict-aliasing”。...下列代码,如果使用“-O2”、“-O3”或“-Os”编译,并且加不“-fno-strict-aliasing”,则“*s”的结果是未定义的,不同的编译器可能产生不同的结果,即使同一编译器也可能运行时结果不尽相同...s); return 0; } 然而,下列用法仍然是不安全的(多版本gcc实测正常,也未有“dereferencing type-punned pointer will break strict-aliasing... m = 0x12345678; short s = ((X*)&m)->s; printf("%x\n", s); return 0; } 如果担心风险,可加上编译参数“-fno-strict-aliasing

1.8K30
您找到你想要的搜索结果了吗?
是的
没有找到

GCC -O2 踩坑指南:严格别名(Strict Aliasing)与整数环绕(Integer Wrap-around)

3、GCC 编译优化选项 GCC -O0, -O1 编译优化选项下开启严格别名(strict aliasing)规则的编译选项为:-fstrict-aliasing。...GCC -O2, -O3, -Os 编译优化选项下,严格别名(strict aliasing)规则默认开启。...4.1.3 开启 -fno-strict-aliasing 编译参数 开启 -fno-strict-aliasing 取消严格别名优化,修改 GCC -O2 导致的严格别名 Bug。...4.1.4 GCC 开启 -O2编译优化,避免严格别名 Bug 的方法 推荐处理顺序为从左到右: 改代码 > -fno-strict-aliasing > 不开 GCC -O2 优化 > -Wno-strict-aliasing...2018 年 Linus Torvalds 就针对 Strict Aliasing 对 GCC 进行了开喷:device property: Get rid of union aliasing 5、整数环绕

26110

ZFNet(2013)及可视化的开端

通过对AlexNet的特征进行可视化,文章作者发现第2层出现了aliasing。...在数字信号处理中,aliasing是指在采样频率过低时出现的不同信号混淆的现象,作者认为这是第1个卷积层stride过大引起的,为了解决这个问题,可以提高采样频率,所以将stride从4调整为2,与之相应的将...kernel size也缩小(可以认为stride变小了,kernel没有必要看那么大范围了),这样修改前后,特征的变化情况如下图所示,第1层呈现了更多更具区分力的特征,第二2层的特征也更加清晰,没有aliasing...更多关于aliasing的内容,可以参见Nyquist–Shannon sampling theorem和Aliasing。 ? 这就引出了另外一个问题,如何将特征可视化?...Understanding Convolutional Networks talk: Visualizing and Understanding Deep Neural Networks by Matt Zeiler Aliasing

89240

OpenGL 抗锯齿

抗锯齿 原文 Anti Aliasing 作者 JoeyDeVries 翻译 Django 校对 Geequlim 在你的渲染大冒险中,你可能会遇到模型边缘有锯齿的问题。...下面是一个简单的立方体,它体现了锯齿边的效果: [anti_aliasing_aliasing.png] 也许不是立即可见的,如果你更近的看看立方体的边,你就会发现锯齿了。...如果我们放大就会看到下面的情境: [anti_aliasing_zoomed.png] 这当然不是我们在最终版本的应用里想要的效果。...这个效果,很明显能看到边是由像素所构成的,这种现象叫做走样(Aliasing)。有很多技术能够减少走样,产生更平滑的边缘,这些技术叫做抗锯齿技术(Anti-aliasing,也被称为反走样技术)。...[anti_aliasing_sample_points.png] 左侧的图显示了我们普通决定一个三角形的覆盖范围的方式。

2.7K20

一个编译参数引发的血案

终于我们发现了一个强相关的参数-fstrict-aliasing。...我们来看看官方说明: -fstrict-aliasing  Allow the compiler to assume the strictest aliasing rules applicable to...具体到我们这个例子,以下代码进行了初始化 *(int *)&_tm = 0; 而-fstrict-aliasing参数假定了我们不会进行类型的转换来使用结构体,当编译器发现代码 *(int *)&_tm...rules [-Wstrict-aliasing]     *(int *)&_tm = 0; 为什么我们的代码编译的时候却没有报警?...原来,因为代码不规范,编译时有好多告警,当初处理的时候添加了参数-Wno-strict-aliasing,这个参数仅仅是把警告给消除了,并没有取消这个假定条件的优化,正确的做法是使用参数-fno-strict-aliasing

81221
领券