duff's device】的更多相关文章

在看strcpy.memcpy等的实现发现用了内存对齐,每一个word拷贝一次的办法大大提高了实现效率,参加该blog(http://totoxian.iteye.com/blog/1220273). duff's device也是利用了类似的原理减少比较的次数来提高了效率. 前几天在网上看见了一段代码,叫做“Duff's Device”,后经验证它曾出现在Bjarne的TC++PL里面: void send( int * to, int * from, int count)         …
主要是下面的代码: register n = (count + 7) / 8;   /\* count > 0 assumed \*/ switch (count % 8) { case 0:    do { \*to = \*from++; case 7:     \*to = \*from++; case 6:     \*to = \*from++; case 5:     \*to = \*from++; case 4:     \*to = \*from++; case 3:    …
又要开始罗里吧嗦的 第四章  Summary 了. 这一次我尽量精简语言. 如果你认为 重复调用一个方法数次有点辣眼睛的话 比如: function test(i){ process(i++); process(i++); process(i++); process(i++); } 那么你可能选择更优解 比如: function test(i){ for(j=0,j<4,j++){ process(i++); } } 但其实第一种性能优于第二种. 有人可能已经想到  Duff's Device…
ID:技术让梦想更伟大 作者:李肖遥 wechat链接:https://mp.weixin.qq.com/s/b1jQDH22hk9lhdC9nDqI6w 相信大家写业务逻辑的时候,都是面向if.else.for.while.switch编程.但是你见过switch嵌套do..while吗? 先上代码 void send( int * to, int * from, int count) { int n = (count + ) / ; switch (count % ) { case : do…
达夫设备设备是一段非常巧妙,看起来非常诡异的c代码,它可以很大的提高程序执行的效率(本文将试验),达夫设备的来源我就不说了,我们来分析一下. 达夫设备是考虑到我们一般用for或者while循环的时候,如果执行循环内容本身用不了多少时间,那么时间将被主要消耗在每次循环的比较语句上边. 事实上比较语句是有很大优化空间的,假设你要循环1000次,结果你从第一次开始就不断的比较是否达到上界,这是很徒劳的. 达夫这个哥们利用了switch语句的跌落行为设计了达夫设备. 我们用达夫设备计算一个累加运算,累加…
const duffDevice = (items, process) => { let iterations = Math.floor(items.length / 8); let startAt = items.length % 8; let i = 0; do { switch(startAt) { case 0 : process(items[i++]); case 7 : process(items[i++]); case 6 : process(items[i++]); case 5…
Javascript 中会用到for 循环,当要循环的数据记录很多的时候,可能会对性能产生很大影响.这时我们可以考虑展开for循环,这时就要用到Duff装置(Duff Device). 先来看一个小例子,用for循环来实现: function regularFoorLoop() { var testVal = 0,i=0; for (i = 0; i <= iterations; i++) { testVal++; } } 这个for循环可以用duff 展开如下,(Jeff Greenberg…
关于Coroutine 说到coroutine就不的不说subroutine,也就是我们常用到的一般函数.调用一个函数开始执行,然后函数执行完成后就退出,再次调用的时候,再从头开始,调用之间是没有保存状态的:但是coroutine是可以在退出时如果再次被调用,可以从上一次退出的点继续执行.也就是说coroutine的调用之间是会保存状态的.如果有多个coroutine,就可以反复调用,但是两个coroutine相互前进.当一个coroutine退出时,不是return,而是yield,表示把当前…
前言 在<高性能JavaScript>一书的第四章算法和流程控制中,提到了减少迭代次数加速程序的策略—达夫设备(Duff's device).达夫设备本身很好理解,但是其效果是否真的像书中所说“如果迭代次数超过1000,那么达夫设备的执行效率将明显提升”?还是随着浏览器性能的逐渐增强,这种以牺牲代码阅读性而获取的性能提升已经微不足道? 达夫设备 达夫设备真的很简单,说白了就是“循环体展开”.看如下的代码: var a = [0, 1, 2, 3, 4]; var sum = 0; for(va…
一.可维护性优化 1.添加注释 注释能够增强代码的可读性以及可维护性,当然,理想情况是满满的注释,但这不太现实.所以我们只需要在一些关键的地方添上注释: 函数和方法:尤其是返回值,因为直接看不出来 大段代码(功能模块):说明模块功能 复杂算法:写出关键点,方便理解 Hack:说明为了修复什么问题,当前方案是否完善,能否改进 2.“暗示”变量类型 通过初始值来暗示,例如: var found = false; var count = 1; var name = ''; var student =…