【转】C 编译器优化过程中的 Bug】的更多相关文章

C 编译器优化过程中的 Bug 一个朋友向我指出一个最近他们发现的 GCC 编译器优化过程(加上 -O3 选项)里的 bug,导致他们的产品出现非常诡异的行为.这使我想起以前见过的一个 GCC bug.当时很多人死活认为那种做法是正确的,跟他们说不清楚.简言之,这种有问题的优化,喜欢利用 C 语言的“未定义行为”(undefined behavior)进行推断,最后得到奇怪的结果. 这类优化过程的推理方式都很类似,他们使用一种看似严密而巧妙的推理,例如:“现在有一个整数 x,我们不知道它是多少.…
VS编译器优化诱发一个的Bug Bug的背景 我正在把某个C++下的驱动程序移植到C下,前几天发生了一个比较诡异的问题. 驱动程序有一个bug,但是这个bug只能 Win32 Release 版本下的驱动才能重现.在 Win32 Debug 版本下,和 Win64 Release/Debug 版本下均无法重新. 随着一步步的分析,最终发现问题是由于VS编译器的一个优化诱发的.当然这并不是VS编译器的bug,只是由于优化诱发程序里面的某个bug. 调试的思路 1. Debug Vs Release…
在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT'; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.…
不要听信你看到的关于优化的“绝对真理”,包括本文所讨论的内容,而应该是在实际的业务场景下通过测试来验证你关于执行计划以及响应时间的假设. 单条查询最后添加 LIMIT 1,停止全表扫描. 对于char(4) 或者vachar(4),无论是中文还是英文都是存储四个字符,注意是字符而不是字节. 如果一个字段未int类型,此类型只有0.1两个状态,需要为此建立索引吗?过度索引,影响更新速度,必须在唯一性较高的字段上建立非聚集索引. 在创建表的时候如果在业务中能保证非null的字段,建议明确标示not…
使用tensorRT之前,你一定要注意你的网络结构是否能够得到trt的支持,无论是CNN还是RNN都会有trt的操作. 例如:tf.nn.dropout(features, keep_prob),trt就不支持. 这个也不奇怪,因为trt在要求输入中,只要你传入样本数据,那你就不能feed一个数值,所以以后直接想都不要想把keep_prob传进来. 为了克服过拟合,你可以使用tf.layers.dense()方法,在后期预测的时候,应该不用确定的这个值了,初步想法,等待验证.…
背景 写这篇文章,主要是为了以后面试方便.因为我简历上写了,上一份工作的最大亮点是将人脸解锁的速度由1200ms优化到了600ms,所以这些内容已经回答无数遍了.但每次总觉得回答的不完整,或者说总感觉可以发挥得更好,于是这里做一些简单的总结性的记录. 我2018年4月份进入到某手机公司,在其中工作了两年多的时间,这期间主要负责人脸解锁的功能.人脸解锁的速度优化,是入职开始的一个很重要的任务,前前后后持续了很长时间.做优化前,首先是明确目标,我接手时人脸解锁的速度是1200ms左右,而我们是参照的…
C#编译器优化那点事   使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码开关即optimize开关,和debug开关一起,有以下几种组合. 在Visual Sutdio中新建一个C#项目时,项目的“调试”(Debug)配置的是/optimize-和/debug:full开关,而“发布”(Release)配置指定的是/optimize+和/debug:pdbonly开关…
作者|孙敏 为什么要做Bug分析? Bug是项目过程中的一个有价值的虫子,它不只是给开发的,而是开给整个项目组的. 通过Bug我们能获得什么? 积累测试方法,增强QA的测试能力,提升产品质量 发现项目过程中的问题,推动优化解决问题:以及可以用来侧面验证流程优化是否有效 提高开发的编码能力,做到Bug预防 项目过程中不可能没Bug,但是我们要利用已有Bug减少未来Bug数,提高产品质量. Bug包含了哪些信息可以分析? Bug本身的信息 标题.描述(操作步骤.预期结果.实际结果.截图等附加信息.环…
1. 在使用layoutSubviews方法调整自定义view内部的子控件坐标时,最好不要使用子控件的centerX,centerY属性,否则会出现奇怪的bug. 如果一定要用,务必仔细检查,该子控件的width,height是否已经赋值. eg1. 在self.imageView.width尚未赋值时,使用self.imageView.centerX /**自定义控件调整内部子控件frame需在该方法中,一旦外面修改自定义控件的宽高frame,或者每次点击按钮,都会立刻调用该方法进行重新布局*…
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Visual C++中的编译器优化.…