gpt4 book ai didi

javascript - 用单个值填充 Uint16Array 的最快方法

转载 作者:行者123 更新时间:2023-11-30 12:26:29 25 4
gpt4 key购买 nike

var a = Uint16Array(16384), n = a.length, c = 65;
for (var i = 0; i < n; i++) a[i] = c;

有没有办法更快地做到这一点?这是一个每个单元格两个字节的类型化数组。

我记得 C 中的 memset() 或 Pascal 中的 fillchar

最佳答案

理论上,类型化数组上的新 fill() 方法是自然的候选者,因为它会以编译速度在内部填充缓冲区,因此性能更快。

不幸的是,事实并非如此。 <强> This performance test 表明,在撰写本文时,传统的 while 循环要快很多倍。即使这个测试对 while 循环有轻微的惩罚。

另外,fill() only supported in Firefox 此刻。

snap

因此,仅使用 Uint16Array 且具有最佳跨平台支持的最快方法是:

var i = 0, a = new Uint16Array(16384);
while(i < 16384) a[i++] = 65;

Uint16/32 数组始终是内存对齐的,因此在某些情况下,当它们的长度在四字节边界上匹配时,您可以使用 32 位数组而不是 2x16 位值进行填充(随意重构):

var i = 0, len = 16384, a = new Uint16Array(len), c = 65;
if (len % 4) {
while(i < len) a[i++] = c; // fill Uint16Array as-is
}
else {
var u32 = new Uint32Array(a.buffer), // shares the same byte-buffer as a
len32 = u32.length,
v = (c << 16) | c; // make value span 2x16 bits
while(i < len32) u32[i++] = v; // fill at close to 2x speed
}
// use "a" here

关于javascript - 用单个值填充 Uint16Array 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29200787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com