3

我有一条简单的消息,其中包含许多重复的数字字段:

syntax = "proto3";
option cc_enable_arenas = true;
message bigData{
    repeated double info = 1;
}

在运行时,数据到达时已经分配。这就是我尝试将其封装到消息中的方式(使用 arena):

void set_data(std::unique_ptr<double[]> table, int size, bigData* message){ /* suppose message is valid */
    google::protobuf::Arena arena;
    google::protobuf::Arena::CreateArray<double>(&arena,size); /*(0)*/
    message->clear_info();
    for (int i = 0; i < size; i++) {
        net->mutable_info()->Add(table[i]);
    }
}
  • 这是正确的用法吗?
  • 有没有办法告诉竞技场这个已经分配的数据属于一个已经初始化的消息?
  • 有没有办法告诉竞技场我要分配的内存(0)已经存在?
  • 如何最大限度地减少不必要的数据分配/解除分配?

更新: * @Azmisov 提出的相关问题:https ://github.com/protocolbuffers/protobuf/issues/8817

4

0 回答 0