BIOS?若是做操作系统,我现在只相信硬件IO端口
■ 有专门的驱动或者能够自己写针对专门的硬件驱动当然好,否则很多时候也只能用相对低效的BIOS啦。
面向对象技术中最有用的是接口,而不是(类)继承。我一直想在DOS下设计一个类似COM(通用组件模型)的东东,实现能多语言协作的面向对象开发,而且最好能实现实模式与保护模式的透明(太NB了,我设计不出来)。
■ OOP里到底什么最有用,是C++社区中永恒的话题,这个很难说清楚。当然封装和接口是非常有用计数概念。COBRA和COM都有DOS实现的开源项目,而且不止一个,呵呵。
类 = 结构体 + 虚函数表 + 编译器障眼法(语法)
■ 类等于什么应该取决于具体应用才是,最简单的时候等于结构+相关函数;有时等于虚表+结构+相关函数;有时虚表+结构+相关函数+typeinfo信息;有时虚表+虚基表+结构+相关函数+typeinfo;还有时。。。。。。。
面向对象是这样发展的:结构体指针 -> 句柄 -> 对象
所以我一直跟别人说Windows系统符合面向对象思想的
■ 完全同意
程序执行效率与编译器没多大关系(注意不是Java、.Net那样的解释器)
影响速度的主要是算法与数据结构,其次是硬件平台特性
■ 算法和体系结构当然对代码效率有莫大的影响,不过不能否认的是编译器优化也是非常重要的。例如:即使是现代CPU,整数除法也是很慢的,在P4上大概也需要超过60个CPU时钟。但是乘法和位运算却非常快,很多编译器支持用乘法和位运算完成快速除法和取模。
■ 另外由于现代CPU的流水设计,它对分支语句非常敏感。特别是循环中出现的分支,可以轻易地浪费掉上千CPU时钟。很多优化编译器有办法使用特殊的汇编指令有效消除这种分支。
■ 此外还有消除数据相关性、子表达式优化、多分支优化、高速缓存和内存子系统访问优化等等上百种非常有效的编译器优化技术。可见目标代码的质量还是与编译器非常有关系的。
至于汇编。如果没用MMX、SSE等并行指令集的话,一般的程序员写绝对没有优化的编译器产生的机器码好
■ 优秀的汇编程序员确实可以写出比最优秀的优化编译器产生的代码快很多的等效汇编实现,并且仅使用编译器会用到的那些汇编指令。这方面的理论和大量实例比较可以google一下 Kris Kaspersky 和 Agner 这两位大师所写的著作。
以前在混一个论坛时看到一个人,他自以为水平很高,经常说XX语言不好
所以我用他最鄙视的VB写了个图像插值缩放程序
开始时他想当然的以为用vc写的肯定比我快,但是编译后发现速度比我的慢许多
然后他反复优化算法,最终决心用汇编重写核心代码,这才与我的差不多(没使用MMX,因为那时我俩都不懂)
自此他彻底服了,承认算法优化的重要性——居然 汇编优化的程序 跟 没有指针的VB差不多
(这件事使我认识到,如果汇编没使用MMX、SSE,千万别跟别人比速度)
■ 优化的层次应该是:体系结构 > 算法 > 细节优化。
■ 其中细节优化是指消除指令相关、控制相关等影响CPU流水的问题;优化高速缓存和内存访问效率;以及等等类似的细节问题。
■ 用汇编写的冒泡排序也不可能比用Java写的快速排序更快,如果在使用同样算法的前提下,一个汇编程序员写出来的代码比它的C等效还差,那只能说明他不适合做一个汇编程序员
我认为C++最有价值的 模板+多重继承,这才是真正现代的编译器技术
■ 这又是一个C++社区中典型的永无止境型争论话题
■ 有专门的驱动或者能够自己写针对专门的硬件驱动当然好,否则很多时候也只能用相对低效的BIOS啦。
面向对象技术中最有用的是接口,而不是(类)继承。我一直想在DOS下设计一个类似COM(通用组件模型)的东东,实现能多语言协作的面向对象开发,而且最好能实现实模式与保护模式的透明(太NB了,我设计不出来)。
■ OOP里到底什么最有用,是C++社区中永恒的话题,这个很难说清楚。当然封装和接口是非常有用计数概念。COBRA和COM都有DOS实现的开源项目,而且不止一个,呵呵。
类 = 结构体 + 虚函数表 + 编译器障眼法(语法)
■ 类等于什么应该取决于具体应用才是,最简单的时候等于结构+相关函数;有时等于虚表+结构+相关函数;有时虚表+结构+相关函数+typeinfo信息;有时虚表+虚基表+结构+相关函数+typeinfo;还有时。。。。。。。
面向对象是这样发展的:结构体指针 -> 句柄 -> 对象
所以我一直跟别人说Windows系统符合面向对象思想的
■ 完全同意

程序执行效率与编译器没多大关系(注意不是Java、.Net那样的解释器)
影响速度的主要是算法与数据结构,其次是硬件平台特性
■ 算法和体系结构当然对代码效率有莫大的影响,不过不能否认的是编译器优化也是非常重要的。例如:即使是现代CPU,整数除法也是很慢的,在P4上大概也需要超过60个CPU时钟。但是乘法和位运算却非常快,很多编译器支持用乘法和位运算完成快速除法和取模。
■ 另外由于现代CPU的流水设计,它对分支语句非常敏感。特别是循环中出现的分支,可以轻易地浪费掉上千CPU时钟。很多优化编译器有办法使用特殊的汇编指令有效消除这种分支。
■ 此外还有消除数据相关性、子表达式优化、多分支优化、高速缓存和内存子系统访问优化等等上百种非常有效的编译器优化技术。可见目标代码的质量还是与编译器非常有关系的。
至于汇编。如果没用MMX、SSE等并行指令集的话,一般的程序员写绝对没有优化的编译器产生的机器码好
■ 优秀的汇编程序员确实可以写出比最优秀的优化编译器产生的代码快很多的等效汇编实现,并且仅使用编译器会用到的那些汇编指令。这方面的理论和大量实例比较可以google一下 Kris Kaspersky 和 Agner 这两位大师所写的著作。
以前在混一个论坛时看到一个人,他自以为水平很高,经常说XX语言不好
所以我用他最鄙视的VB写了个图像插值缩放程序
开始时他想当然的以为用vc写的肯定比我快,但是编译后发现速度比我的慢许多
然后他反复优化算法,最终决心用汇编重写核心代码,这才与我的差不多(没使用MMX,因为那时我俩都不懂)
自此他彻底服了,承认算法优化的重要性——居然 汇编优化的程序 跟 没有指针的VB差不多
(这件事使我认识到,如果汇编没使用MMX、SSE,千万别跟别人比速度)
■ 优化的层次应该是:体系结构 > 算法 > 细节优化。
■ 其中细节优化是指消除指令相关、控制相关等影响CPU流水的问题;优化高速缓存和内存访问效率;以及等等类似的细节问题。
■ 用汇编写的冒泡排序也不可能比用Java写的快速排序更快,如果在使用同样算法的前提下,一个汇编程序员写出来的代码比它的C等效还差,那只能说明他不适合做一个汇编程序员

我认为C++最有价值的 模板+多重继承,这才是真正现代的编译器技术
■ 这又是一个C++社区中典型的永无止境型争论话题


