为什么 flatbuffer struct fields 不能是 vector/table/string?
Why flatbuffer struct fields can not be vector/table/string?
结构只能包含标量或其他结构。但据我所知,在将 vector/table/string 字段写入 table 数据时,只会将偏移量写入缓冲区(vector/table/string 的数据在 table 数据之前写入)。所以结构包含 vector/table/string 字段仍然可以有固定大小。为什么 flatbuffer 会限制 struct 只能包含标量或其他结构?
struct
背后的想法是,它是一块自包含的内存,始终具有相同的布局和大小,因此可以很容易地自行复制,尤其是在支持此类的语言中原生类型,如 C/C++/Rust 等
如果可以包含字符串,那么至少是两块内存,距离和大小都是可变的,复制效率不高,不易管理。对于这种情况,我们有 table
。
如果 struct
中必须有向量或字符串,一些语言已经支持固定长度的“数组”类型。你可以把它加上结构中的长度字段来模拟向量和字符串,当然缺点是为它们分配的 space 总是相同的。
结构只能包含标量或其他结构。但据我所知,在将 vector/table/string 字段写入 table 数据时,只会将偏移量写入缓冲区(vector/table/string 的数据在 table 数据之前写入)。所以结构包含 vector/table/string 字段仍然可以有固定大小。为什么 flatbuffer 会限制 struct 只能包含标量或其他结构?
struct
背后的想法是,它是一块自包含的内存,始终具有相同的布局和大小,因此可以很容易地自行复制,尤其是在支持此类的语言中原生类型,如 C/C++/Rust 等
如果可以包含字符串,那么至少是两块内存,距离和大小都是可变的,复制效率不高,不易管理。对于这种情况,我们有 table
。
如果 struct
中必须有向量或字符串,一些语言已经支持固定长度的“数组”类型。你可以把它加上结构中的长度字段来模拟向量和字符串,当然缺点是为它们分配的 space 总是相同的。