Below you will find pages that utilize the taxonomy term “零拷贝”
May 17, 2025
零拷贝bytemuck与 borsh
"在上一篇博文《深入理解 Serde、Bincode 与 Borsh 的关系与区别》介绍了常用的几种解析二进制数据的方法,主要有 bincode 与 borsh, 并提到过在区块链领域里一般推荐使用 borsh 解析数据。但随着合约的开发使用borsh的地方越来越多,会经常遇到提示超出 4K Stack 大小的错误。这是因为在solana里,虚拟机 sbf 限制了一个合约最大允许使用的statck大小上限为 4k。尽管我们使用完一个大变量通过一些方法,如变量作用域、通过Box将内存移动到heap、或手动drop立即释放内存。但仍有些场景是没有采用这种办法的,这时应该如何办呢?\n如果经常看一些优秀的开源项目的话,会发现有一个 bytemuck 的crate,它是一个 zerocopy 库,可以避免内存复制带来的开销,加速解析数据速度,这里给出一个测试代码\nuse borsh::{BorshDeserialize, BorshSerialize}; use bytemuck::{Pod, Zeroable}; use solana_program::pubkey::Pubkey; use …"