【任务描述】
我想存储一些二进制数据,例如。图像或字体等这些二进制数据将被编译为字节码并存储在 rom 中。
目前我倾向于使用字符串或Uint8Array,但我不知道在运行编译为字节码时哪个效率更高。
将数据放入字符串或类型数组对我来说都可以。但我可以稍后使用 typedarray 访问它。如果我将数据转换为 typedarray,它在内存消耗方面是否比字符串更有效?可以区分类型数组和字符串的性能消耗吗?
【任务来源】
上游社区
https://github.com/jerryscript-project/jerryscript/issues/4911
由于字符串在内部以 cesu-8 编码存储,因此通过将每个字节映射到字符来将数据存储在字符串中平均需要大约 +50% 的内存。(低于 128 的值将使用 1 个字节进行编码,而高于 128 的值将使用 2 个字节进行编码)。
由于这种情况下的数据是使用可变参数编码存储的,因此对字符串的随机访问每次都需要线性查找,这在性能方面非常糟糕。
使用 Uint8Array 需要恒定的内存开销,它由 TypedArray 对象和 ArrayBuffer 标头组成,在存储大量数据时可以忽略不计。访问缓冲区也只需要恒定的开销。基于此,TypedArrays 应该是首选。
您可以使用外部 ArrayBuffer将数据存储在 rom 中,并使用该缓冲区创建一个 TypedArray 作为后备存储。IMO 这将是性能和内存方面最有效的方法。
可能导致问题的一件事是(据我所知)外部 ArrayBuffers 没有写保护,因此如果 javascript 代码尝试写入 TypedArray,则可能导致崩溃。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论