2017-09-12 2 views
1

gRPCを使い始めたばかりで、C++のバイトがstd::stringにコンパイルされていることに気付きました。つまり、サービスに到着するすべてのgRPCオブジェクトは、std::string所有権のために新しいバッファにコピーする必要があります。 。grpcのゼロコピーバイトC++

私は、すべてのオブジェクトを新しいバッファにコピーしてから使用する(あまりにも多くの割り当てをしたくない)。

既知の解決策はありますか、またはgRPCを間違って使用していますか?

答えて

0

gRPCはprotobufsを使用しています。生成されたrelease_XXX()メソッドを呼び出すことで、protobuf Messageから移動することができます。

string* release_foo():フィールドの所有権を解放し、stringオブジェクトのポインタを返します。これを呼び出した後、呼び出し側は割り当てられたstringオブジェクトの所有権を取り、foo()は空の文字列/空のバイトを返します。

https://developers.google.com/protocol-buffers/docs/reference/cpp-generated

+0

は私がいるProtobuf生成されたオブジェクトからではないのstd ::文字列からバイナリデータを解放する必要があります。 – RcRonco

+0

'std :: string'からバイナリデータを解放する方法はありません。 gRPCをコピーせずに使いたい場合は、 'std :: string'を内部的に使うようにストレージを整理する必要があります。 – szym