2017-09-12 1 views
1

방금 ​​gRPC를 사용하기 시작했고 C++의 바이트가 std::string으로 컴파일됨을 알았습니다. 즉, 서비스에 도착한 모든 gRPC 객체를 std::string 소유권으로 인해 새 버퍼에 복사해야합니다. .grpc에서 0 바이트 복사 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 생성 된 객체로부터가 아닌 표준 : : 문자열에서 이진 데이터를 공개 할 필요가있다. – RcRonco

+0

'std :: string'에서 바이너리 데이터를 해제 할 방법이 없습니다. gRPC를 복사본없이 사용하려면 내부적으로'std :: string'을 사용하도록 저장소를 구성해야합니다. – szym