首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >proto3编码-结构与编组结构

proto3编码-结构与编组结构
EN

Stack Overflow用户
提问于 2018-11-13 17:17:46
回答 2查看 56关注 0票数 1

我想知道编组一个结构和编组一个结构在mem效率方面是否有什么显着的区别。

例如:假设我们有一个带有一些字段的结构B。

代码语言:javascript
复制
message B{...}

常见的表示法:

代码语言:javascript
复制
message A {
    B b = 1;
}

另一种方式:

代码语言:javascript
复制
message A {
    bytes b = 1;
}

其中b是编组的B结构。

一般来说,这是一个好的实践吗?是否有效率方面的影响?

谢谢,Elad

EN

回答 2

Stack Overflow用户

发布于 2018-11-13 17:25:39

在有效负载级别,它们是相同的-但是,就实现如何对待它们而言,可能存在差异。最明显的区别是,在对bytes进行进一步反序列化之前,您不能使用它;这有利弊:

  • 如果你不打算接触它,这可能是好的和有利的-避免一些你不需要的CPU处理,你不需要读或写;这也意味着任何下游的分配(字符串等)不需要发生-所以你只有一个分配块:简单而高效的
  • 如果你确实需要读它,那么除了让生活不那么方便,你还可以为原始表单(一块字节)分配额外的内存块,并且你将需要为反序列化的表单分配内存;如果直接使用反序列化形式,大多数实现都会跳过中间分配

所以:是的,它会有不同的特征。它们是否有利(或相反)取决于您是否还需要在bytes有效负载上执行额外的反序列化步骤

票数 1
EN

Stack Overflow用户

发布于 2018-11-13 18:03:42

我认为声明bytes字段而不是在proto文件中指定的结构是一种糟糕的做法。

这被称为规范漏洞:您必须编写额外的文档来描述接收方必须如何理解字节

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53277563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档