1右值引用引入的背景 临时对象的产生和拷贝所带来的效率折损,一直是C++所为人诟病的问题。但是C++标准允许编译器对于临时对象的产生具有完全的自由度,从而发展出了CopyElision、RVO(包括NRVO)等编译器优化技术,它们可以防止某些情况下临时对象产生和拷贝。下面简单地介绍一下CopyEli ...
分类:
编程语言 时间:
2016-11-27 20:20:10
阅读次数:
193
10.1概述Java 语言的 “编译期” 其实是一段 “不确定” 的操作过程,因为它可能是指一个前端编译器(其实叫 “编译器的前端” 更准确一些)把 .java 文件转变成 .class 文件的过程;...
分类:
其他好文 时间:
2016-11-20 16:18:15
阅读次数:
305
【单件类】 保证只能有一个实例化对象,并提供全局的访问入口。 【设计注意事项】 1.阻止所有实例化的方法: private 修饰构造函数,赋值构造函数,赋值拷贝函数。 2.定义单实例化对象的方法: a.使用static 修饰 b.使用new+delete的方法 3.多线程版本: 使用双检测锁定,即先 ...
分类:
编程语言 时间:
2016-11-11 01:35:03
阅读次数:
345
结论1: Result := AtomicIncrement(__gr); 这句不会被优化掉 结论2: ...
现在研究一下编译器优化会对生成的指令产生什么影响,在此基础上介绍C语言的volatile限定符。首先看下面的C程序: 我们用recv和send这两个全局变量来模拟设备寄存器。假设某平台采用内存映射I/O,串口发送寄存器和串口接收寄存器位于固定的内存地址,而recv和send这两个全局变量也有固定的内 ...
分类:
编程语言 时间:
2016-08-30 09:22:33
阅读次数:
334
处理器内存模型 顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和JMM,那么很多的处理器和编译器优化都要被禁止,这对执行性能将会有很大的影响 ...
分类:
编程语言 时间:
2016-08-30 07:08:36
阅读次数:
195
C语言的编译器会对变量和代码进行一定的优化,我们看下面这个例子。inta,b,c;a=1;b=a;c=b;这个程序正常运行的时候会这样子:先把a指向的内存空间内放入1再把a指向的内存空间里的数读出来放到b指向的内存空间,最后再把b指向的内存空间里的数读出来放到c指向的内存空间里。然而..
分类:
编程语言 时间:
2016-08-18 14:50:32
阅读次数:
272
一、早期(编译器)优化 语法糖 c#和java的泛型截然不同看似相同,c#是真实的泛型 编译运行一直存在 List<string> 和List<int> 就完全是两个类 而Java中 是伪泛型采用类型擦除的方法实现泛型 List<Integer> List<String> 运行期就是同一个类 编译期 ...
分类:
其他好文 时间:
2016-08-17 22:35:27
阅读次数:
145
处理器内存模型 顺序一致性内存模型是一个理论参考模型,JMM 和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM 和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和 JMM,那么很多的处理器和编译器优化都要被禁止,这对执行性能将会有很大 ...
分类:
编程语言 时间:
2016-08-10 19:13:00
阅读次数:
214
好书推荐:Effective Java中文版(第2版) JVM JIT编译器优化技术有近100中,其中最最重要的方式就是内联(inlining)。方法内联可以省掉方法栈帧的创建,方法内联还使让JIT编译器更多更深入的优化变成可能。本人在fastxml(速度比XPP3(基于xmlpull)还快的xml ...
分类:
其他好文 时间:
2016-08-02 00:57:59
阅读次数:
995