首页 > 解决方案 > 将 C++ Protobuf Arena 用于重复字段的最佳方式是什么?

问题描述

我有以下protobuf:

message Message {
...
}

message Response {
  repeated Message messages = 0;
}

service MessageService {
  GetMessage() return (Reponse);
}

在我的 C++ 代码中,我正在进行一些消息计算并希望将消息添加到messages字段中。我在做:

Arena arena;
// some iteration loop
for {
  auto message =
      google::protobuf::Arena::CreateMessage<Message>(arena);
  response->mutable_messages()->AddAllocated(message);
}

消息的总大小很大,所以我认为使用 Arena 会更好。但似乎AddAllocated会复制竞技场(https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.repeated_field#RepeatedPtrField.AddAllocated.details),因为messages字段不是来自竞技场。

这样做的最佳方法是什么?我应该使用竞技场吗?

标签: c++protocol-buffersgrpc

解决方案


推荐阅读