gpt4 book ai didi

c++ - Protocol Buffer 在解析时是否重用字符串指针?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:09 24 4
gpt4 key购买 nike

我正在使用 Protocol Buffers,并尽量减少对堆的调用。

在示例中,PhoneNumber 有一个名为 number 的必需成员,它是一个字符串。

  message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}

当我生成代码时,我在 Person_PhoneNumber 中得到这个指针成员:

::std::string* number_;

所以我想知道当我在一个已经存在的 Person_PhoneNumber 上调用 parseFrom 时是否会重用这个字符串

我查看了生成的代码,但它很难解码,尤其是考虑到对 GetEmptyStringAlreadyInitedSharedCtor

的所有调用

最佳答案

是的,如果您为多个解析重用同一个消息对象,那么所有子对象也将被重用。事实上,Clear() 方法从不删除任何内容,而只是标记所有内容以供重用。导致任何内存被释放的唯一方法是实际销毁顶级对象。

这是一个关键的性能特征,但如果您解析具有许多不同“形状”的消息,它有时会导致不希望的内存使用,因为总内存占用最终将成为所有这些“形状”的并集。您可以使用 SpaceUsed() 方法来确定消息当前使用了多少内存,以及释放太大的对象。

关于c++ - Protocol Buffer 在解析时是否重用字符串指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26784294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com