首页 »安全 » 低级语言:语言越低级 运行效率就越高吗? »正文
低级语言:语言越低级 运行效率就越高吗?
来源: 发布时间:星期六, 2009年9月12日 浏览:5次 评论:0
本来我是要继续写我 ![](/icons/65143de.gif) foreach系列文章 ![](/icons/65143de.gif) 另外两篇 ![](/icons/65143de.gif) ![](/icons/65143dou2.gif) 但是看了评C#事件处理 ![](/icons/65143dou.gif) 有 ![](/icons/65143yi.gif) 些感触
我区别意大家有关语言越低级 ![](/icons/65143dou.gif) 运行效率就越高 ![](/icons/65143de.gif) 说法 ![](/icons/65143dou2.gif)
语言越低级 ![](/icons/65143dou.gif) 编译器能够决定 ![](/icons/65143de.gif) 东西就越少 ![](/icons/65143dou.gif) 就越不能很好 ![](/icons/65143de.gif) 优化执行代码 ![](/icons/65143dou2.gif) 大家想想为什么c语言编译器 ![](/icons/65143dou.gif) ![](/icons/65143yi.gif) 般都忽略register关键字 ![](/icons/65143dou.gif) C ![](/icons/65143jiajia.gif) ![](/icons/65143yi.gif) 般都忽略inline关键字? 很多时候 ![](/icons/65143dou.gif) 编译器只要掌握了足够 ![](/icons/65143de.gif) 信息 ![](/icons/65143dou.gif) 就能做出明智 ![](/icons/65143de.gif) 决定 ![](/icons/65143dou2.gif)
以前我测过delphi和C ![](/icons/65143jiajia.gif) 生成 ![](/icons/65143de.gif) 代码 ![](/icons/65143dou.gif) delphi ![](/icons/65143de.gif) 代码比C ![](/icons/65143jiajia.gif) 高效得多 ![](/icons/65143dou2.gif) ![](/icons/65143yinwei.gif) C/C ![](/icons/65143jiajia.gif) 里广泛使用了指针 ![](/icons/65143dou.gif) 对于变量 ![](/icons/65143de.gif) 位置 ![](/icons/65143dou.gif) struct中各个成员 ![](/icons/65143de.gif) 排列思路方法 ![](/icons/65143dou.gif) ![](/icons/65143diaoyong.gif) 约定 ![](/icons/65143dou.gif) 对于编译器都有非常严格 ![](/icons/65143de.gif) 限制 ![](/icons/65143dou2.gif) 编译器只能忠实 ![](/icons/65143de.gif) 翻译 ![](/icons/65143dou.gif) 错失了很多优化代码 ![](/icons/65143de.gif) 机会 ![](/icons/65143dou2.gif) 为了能够享受各种代码优化技术 ![](/icons/65143dou.gif) C ![](/icons/65143jiajia.gif) 编译器都提供了非常多 ![](/icons/65143de.gif) 编译优化选项 ![](/icons/65143dou.gif) 但是绝大部分都不是100%安全 ![](/icons/65143de.gif) ![](/icons/65143dou2.gif) ![](/icons/65143yinwei.gif) C/C ![](/icons/65143jiajia.gif) ![](/icons/65143chengxu.gif) 员总是可以越权完成很多低级操作 ![](/icons/65143dou2.gif) 比如:用const修饰 ![](/icons/65143de.gif) 变量是不会被修改 ![](/icons/65143de.gif) ![](/icons/65143dou.gif) 编译器可以利用这个知识将这个变量 ![](/icons/65143de.gif) 值缓存Cache在寄存器中 ![](/icons/65143dou2.gif) 但是在C ![](/icons/65143jiajia.gif) 中 ![](/icons/65143dou.gif) 就不能做这项优化 ![](/icons/65143dou.gif) ![](/icons/65143yinwei.gif) C ![](/icons/65143jiajia.gif) ![](/icons/65143chengxu.gif) 员可以强制cast掉const限制 ![](/icons/65143dou2.gif) 也许大家认为编译器能够监测到这种cast ![](/icons/65143dou.gif) 自动关掉这项优化 ![](/icons/65143dou.gif) 但是谁能保证其它.obj文件里 ![](/icons/65143de.gif) 代码有没有修改这个const变量呢?
同样类 ![](/icons/65143de.gif) 私有成员 ![](/icons/65143dou.gif) 在C ![](/icons/65143jiajia.gif) 中也很难真正实现访问跟踪 ![](/icons/65143dou2.gif) 编译器没有100%确信 ![](/icons/65143de.gif) 知识 ![](/icons/65143dou.gif) 如何能去优化呢?
世界上最好 ![](/icons/65143de.gif) 汽车是手工打造 ![](/icons/65143de.gif) ![](/icons/65143dou.gif) 但是不是说手工打造 ![](/icons/65143de.gif) 汽车就 ![](/icons/65143yi.gif) 定比工业批量造出 ![](/icons/65143de.gif) 汽车好
我想写 ![](/icons/65143chengxu.gif) 最重要 ![](/icons/65143de.gif) 是如何最清晰 ![](/icons/65143de.gif) 表达我们要解决 ![](/icons/65143de.gif) 问题 ![](/icons/65143dou.gif) 而不要过多 ![](/icons/65143de.gif) 体现解决问题 ![](/icons/65143de.gif) 次要细节 ![](/icons/65143dou2.gif) 我们要 ![](/icons/65143de.gif) 是报表、订单;而不是内存 ![](/icons/65143dou.gif) 指针 ![](/icons/65143dou.gif) ![](/icons/65143hanshu.gif) ![](/icons/65143dou2.gif) 如果我们能从更高、更抽象 ![](/icons/65143de.gif) 层次描述问题 ![](/icons/65143dou.gif) 就会留给底层软件Software更多发挥 ![](/icons/65143de.gif) 空间 ![](/icons/65143dou2.gif) 比如底层软件Software可以选择低运行效率 ![](/icons/65143dou.gif) 极高开发效率 ![](/icons/65143de.gif) 思路方法完成功能 ![](/icons/65143dou.gif) 而快速 ![](/icons/65143de.gif) 制作原形 ![](/icons/65143dou.gif) 展示设计;或者底层软件Software选择高速运行 ![](/icons/65143de.gif) 策略 ![](/icons/65143dou.gif) 面向运行时间要求高 ![](/icons/65143de.gif) 场合;或者选择低内存占用作为目标 ![](/icons/65143dou.gif) 等等
规则不是约束创造性地力量 ![](/icons/65143dou.gif) 而是激发创造性地基础 ![](/icons/65143dou2.gif) 没有稳定 ![](/icons/65143de.gif) 规则 ![](/icons/65143dou.gif) 哪里会有什么创造?我认为.net规则 ![](/icons/65143dou.gif) 是激发创造 ![](/icons/65143de.gif) 开始 ![](/icons/65143dou.gif) 是 ![](/icons/65143yi.gif) 个新 ![](/icons/65143de.gif) 世界 ![](/icons/65143de.gif) 开始
有人质疑C#完成事件模型太隐晦 ![](/icons/65143dou.gif) 臃肿 ![](/icons/65143dou.gif) 和il不直接对应 ![](/icons/65143dou.gif) 太复杂 ![](/icons/65143dou2.gif) event关键字完成了多播事件、异步事件 ![](/icons/65143dou2.gif) 想想java为了实现多播事件 ![](/icons/65143dou.gif) 明确 ![](/icons/65143de.gif) 使用了列表 ![](/icons/65143dou2.gif) 虽然C#也使用列表实现多播 ![](/icons/65143dou.gif) 但是使用列表这个事实并没有明确 ![](/icons/65143de.gif) 在语法上体现出来 ![](/icons/65143dou2.gif) 这有什么区别呢?这当然区别!在delegate中只有 ![](/icons/65143yi.gif) 个 ![](/icons/65143hanshu.gif) 指针时 ![](/icons/65143dou.gif) 这个列表是不生成 ![](/icons/65143de.gif) ![](/icons/65143dou.gif) 而且 ![](/icons/65143diaoyong.gif) 也是直接 ![](/icons/65143de.gif) ![](/icons/65143dou.gif) 并没有 ![](/icons/65143yi.gif) 个 ![](/icons/65143diaoyong.gif) 循环 ![](/icons/65143dou2.gif) 另外 ![](/icons/65143dou.gif) C#通过delegate还可以实现异步事件 ![](/icons/65143dou.gif) 统 ![](/icons/65143yi.gif) 了异步I/O ![](/icons/65143de.gif) 编程模型 ![](/icons/65143dou.gif) 最近Ado.net也执行异步执行sql语句了 ![](/icons/65143dou2.gif) Java事件 ![](/icons/65143de.gif) ![](/icons/65143int.gif) erface实现 ![](/icons/65143dou.gif) 要完成异步事件不知道要使用多少代码 ![](/icons/65143dou2.gif) 而且只要代码 ![](/icons/65143yi.gif) 旦写成 ![](/icons/65143dou.gif) 它就死了 ![](/icons/65143dou.gif) 运行环境就不能再做进 ![](/icons/65143yi.gif) 步 ![](/icons/65143de.gif) 优化了
比如做出租车 ![](/icons/65143dou.gif) 如果告诉司机你 ![](/icons/65143de.gif) 目标地点 ![](/icons/65143dou.gif) 司机就可以综合道路 ![](/icons/65143de.gif) 长度、拥堵情况、路况情况选择 ![](/icons/65143yi.gif) 个优化解 ![](/icons/65143dou2.gif) 相反 ![](/icons/65143dou.gif) 如果告诉司机你 ![](/icons/65143de.gif) 路线 ![](/icons/65143dou.gif) 那么 ![](/icons/65143yi.gif) 切都固定了 ![](/icons/65143dou.gif) 僵化了 ![](/icons/65143dou.gif) 司机拥有再多 ![](/icons/65143de.gif) 知识 ![](/icons/65143dou.gif) 都无法用上了 ![](/icons/65143dou2.gif) 高级语言和低级语言的间 ![](/icons/65143de.gif) 差别就和这个现实生活 ![](/icons/65143de.gif) 例子是 ![](/icons/65143yi.gif) 个道理 ![](/icons/65143dou2.gif) 也许很多人区别意 ![](/icons/65143dou.gif) 认为自己既是乘客也是司机 ![](/icons/65143dou2.gif) 但是你认为自己真 ![](/icons/65143de.gif) 对所有 ![](/icons/65143de.gif) 计算机知识都了解吗?CPU ![](/icons/65143de.gif) 区别 ![](/icons/65143dou.gif) Cache效率 ![](/icons/65143de.gif) 区别 ![](/icons/65143dou.gif) 总线效率 ![](/icons/65143de.gif) 区别 ![](/icons/65143dou2.gif) 硬件影响软件Software ![](/icons/65143de.gif) 要素已经非常多 ![](/icons/65143dou.gif) 软件Software ![](/icons/65143de.gif) 影响就更多了 ![](/icons/65143dou2.gif) 现代 ![](/icons/65143de.gif) 软件Software会依赖大量 ![](/icons/65143de.gif) 操作系统 ![](/icons/65143de.gif) ![](/icons/65143diaoyong.gif) 、库 ![](/icons/65143hanshu.gif) ![](/icons/65143diaoyong.gif) 、编译器等等 ![](/icons/65143dou.gif) 谁能知道在数以万计 ![](/icons/65143de.gif) ![](/icons/65143hanshu.gif) 中 ![](/icons/65143dou.gif) 那 ![](/icons/65143yi.gif) 个效率高 ![](/icons/65143dou.gif) 那 ![](/icons/65143yi.gif) 个效率低 ![](/icons/65143dou2.gif) 我们优化了数周代码获得 ![](/icons/65143de.gif) 性能提升 ![](/icons/65143dou.gif) 会被 ![](/icons/65143yi.gif) 个设计糟糕 ![](/icons/65143de.gif) 库 ![](/icons/65143hanshu.gif) 轻易吞没 ![](/icons/65143dou2.gif) 就算优化好了 ![](/icons/65143yi.gif) 个系统 ![](/icons/65143dou.gif) 换 ![](/icons/65143yi.gif) 个环境还是效率高 ![](/icons/65143de.gif) 吗?比如用户机器更换了显卡驱动 ![](/icons/65143chengxu.gif) ?谁都不会有能力做 ![](/icons/65143yi.gif) 个好司机
让真正拥有实际运行知识 ![](/icons/65143de.gif) C#语言、.net运行环境来替我们完成95% ![](/icons/65143de.gif) 性能优化吧 ![](/icons/65143dou.gif) 我们能做 ![](/icons/65143yi.gif) 个好乘客 ![](/icons/65143dou.gif) 说清楚我们 ![](/icons/65143de.gif) 目 ![](/icons/65143de.gif) 地 ![](/icons/65143dou.gif) 就是极大 ![](/icons/65143de.gif) 成功了
上 篇文章: 用端口截听实现隐藏嗅探和攻击( 2)
下 篇文章: Serv-U ftp server 密码算法
相关文章
读者评论
发表评论
|
|