第98页
我很严肃的 (下一秒变僵尸)
- 页码:第98页
Duff's Device:
var iterations = Math.ceil(values.length / 8); var startAt = values.length % 8; var i = 0; do { switch(startAt){ case 0: process(values[i++]); case 7: process(values[i++]); case 6: process(values[i++]); case 5: process(values[i++]); case 4: process(values[i++]); case 3: process(values[i++]); case 2: process(values[i++]); case 1: process(values[i++]); } startAt = 0; } while (--iterations > 0);第一眼没看明白,忘了case对应的执行语句中如果没有break的话就会顺序执行下去。 书中提到8并不是随意选择的,但没有讲是什么原理。 Duff's Device + Unroll loops,在处理大数组的时候要快一点,因为去掉了switch判断:
var iterations = Math.floor(values.length / 8); var leftover = values.length % 8; var i = 0; if (leftover > 0){ do { process(values[i++]); } while (--leftover > 0); } do { process(values[i++]); process(values[i++]); process(values[i++]); process(values[i++]); process(values[i++]); process(values[i++]); process(values[i++]); process(values[i++]); } while (--iterations > 0);注意这两个方法在处理大数组的时候才有性能的提升。
32人阅读
说明 · · · · · ·
表示其中内容是对原文的摘抄