Go:填充结构成员以从二进制文件中读取对齐的结构

Go: Padding struct members to read aligned structs from a binary

提问人:aviro 提问时间:3/26/2023 最后编辑:aviro 更新时间:3/27/2023 访问量:105

问:

我知道当 Go 程序从由 C 程序(或任何其他使用标准对齐的程序)编写的二进制文件中读取解压缩的结构时,我需要在某些字段之前添加一些填充,以确保正确读取结构,所有成员都对齐。例如,在以下示例中:binary.Read

type Example struct {
    A int32
    B int32
    C int32
    D int64
}

我需要在成员之前添加填充以确保它对齐:D

type Example struct {
    A int32
    B int32
    C int32
    _ int32
    D int64
}

上面的例子非常简单,但有时我需要阅读更复杂的结构,其中有许多成员(其中一些成员本身可能是结构)。

目前,我需要自己计算我的 Go 结构,以确定我应该根据对齐方式在哪里添加填充,这是一个漫长而复杂的过程。

有没有一些工具可以读取我的代码并告诉我应该在哪里添加填充?或者也许是一些 Go 库函数,它可以将我的结构作为参数并告诉我应该在哪里添加填充以确保它正确对齐?

我尝试过 fieldalignmentaligncheck 等工具,但它们只有助于结构的内存优化,而不是在不更改成员顺序的情况下填充结构。

go struct 填充 内存对齐

评论


答: 暂无答案