私は小さなデバイスに取り組んでおり、PC ソフトウェアから生成されたかなり大きな構成パラメーター (~100 KB) のセットを持っています。これまでは、パラメータをバイナリ ファイルに保存し、データ構造にロードしていました。メンテナンスは少し面倒です (言語が異なる、構造内のフィールドの順序が一致する、バージョンが異なるなど)。そのため、Google プロトコル バッファへの移行を検討しています。
小さなデバイスの観点から、シリアル化されたプロトコル バッファーを格納するために必要なメモリ領域が気になります。私は C で作業しているので、protobuf-embedded-cをダウンロードしてサンプルの作業を開始しました。計算中のバッファの最大サイズには少し驚きました。たとえば、以下は空のバッファーのサイズであり、名前付きの型の単一の変数を含むバッファーのサイズです。
#define MAX_M_Empty_SIZE 2
#define MAX_M_double_SIZE 12
#define MAX_M_float_SIZE 8
#define MAX_M_int32_SIZE 14
#define MAX_M_int64_SIZE 14
#define MAX_M_uint32_SIZE 9
#define MAX_M_uint64_SIZE 14
#define MAX_M_sint32_SIZE 9
#define MAX_M_sint64_SIZE 14
#define MAX_M_fixed32_SIZE 8
#define MAX_M_fixed64_SIZE 12
#define MAX_M_sfixed32_SIZE 8
#define MAX_M_sfixed64_SIZE 12
#define MAX_M_bool_SIZE 5
構造体に「int32」を追加するたびに、最大サイズが 14 バイト増加しました。これにはキーが含まれており、おそらくバリアントのエンコーディングの最悪のケースが含まれていることはわかっていますが、今後何が期待できますか? 大きなメッセージは小さなメッセージよりも効率的ですか、それともエンコードされた値に依存していますか?
要約すると、プロトコル バッファのメモリ空間の使用状況を把握しようとしているだけです。構成データを格納するために必要なメモリ領域が大幅に増加するために、使いやすさを犠牲にすることはできません。ありがとう!