ProtoBuf에서 첫 번째 파일 형식을 설계하려고하는데 메모리/스트림 레이아웃이 완전히 명확하지 않기 때문에 어떤 경우에 가장 좋은 선택인지 모르겠습니다. ProtoBuf에서 "missing optional"/ "empty repeated"필드가 얼마나 많은 메모리를 사용합니까?
그래서 나는 실제로 몇 가지 질문을 가지고 있지만 모든 밀접하게 관련 :1)가 생략 된 선택 필드의 비용을, 무엇을?
비트 비트 필드는 현재/부재 필드를 플래그하는 데 사용할 수 있기 때문에 하나의 코드 만 사용해야한다고 생각하지만 확실하지는 않습니다. 대신 선택적 필드 당 전체 바이트를 사용할 수 있습니다.
2) 필드가 비어 있으면 반복되는 필드 비용은 어떻게됩니까? 옵션 필드와 마찬가지로 1 비트인가, 아니면 "필드 헤더"+ 크기 (varint) 바이트가 크기 0이라고 할 수 있습니까?
3) "bytes"는 암시 적으로 크기가 있기 때문에 누락 된 선택적 바이트 필드와 비어있는 필수 바이트 필드 사이에 실제로 크기 차이가 있습니까?
[편집] "메모리"란 파일 시스템이나 네트워크 대역폭에서 사용되는 공간을 의미합니다. RAM을 의미하지는 않았는데, 이는 프로그래밍 언어에 의존하기 때문입니다.
'선택적'필드는 와이어에서 생략되지 않습니다. 이 문서는 인코딩 된 메시지에는 보증처럼 들리지 않는 '해당 태그 번호를 가진 키 - 값 쌍이있을 수도 그렇지 않을 수도 있습니다. 좀 더 명확히 해 주시겠습니까? – Elpezmuerto
@Elpezmuerto https://developers.google.com/protocol-buffers/docs/encoding#optional - 핵심은 '0 개 이상'입니다. "생략"의 전체적인 점은 그것이 제로의 경우라는 것입니다. 그리고 이것은 메시지의 순방향 호환성을 허용하는 바로이 것입니다. 예, 작가는 * 기본값으로 바이트를 내보낼 수 있지만 생략되지는 않습니다. 확실히 값이 있고 수신기가 생략 된 값임을 감지 할 수 없습니다 –