My Anchor程序有一个指令结构,如下所示:
#[derive(Accounts)]
pub struct MyInstruction<'info> {
pub my_account: Account<'info, MyAccount>,
// ...
}
#[account]
pub struct MyAccount {
// ... Many different fields
}
当我尝试运行使用该结构的指令时,我会得到一个奇怪的堆栈错误,如下所示:
Program failed to complete: Access violation in stack frame 3 at address 0x200003fe0 of size 8 by instruction #28386
什么东西?
Anchor默认情况下会将您的帐户放入堆栈中。但是,很可能是因为你的账户很大,或者你有很多账户,所以你的账户空间不足。
如果你在上面的日志中查看,你可能会出现如下错误:
Stack offset of -4128 exceeded max offset of -4096 by 32 bytes, please minimize large stack variables
为了解决这个问题,你可以尝试Box
处理你的帐户结构,将它们移动到堆中:
#[derive(Accounts)]
pub struct MyInstruction<'info> {
// Note the Box<>!
pub my_account: Box<Account<'info, MyAccount>>,
}