我正在研究一個小型設備,它具有從PC軟件生成的相當大的一組配置參數(〜100 KB)。在過去,我們已經將參數存儲在二進制文件中,並將它們加載到數據結構中。維護有點煩人(不同的語言,確保結構中字段的順序匹配,不同的版本等),所以我們正在考慮去Google協議緩衝區。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個字節。我知道這包括關鍵字,可能是Variant上編碼的最壞情況,但我可以期待什麼呢?大消息比小消息更有效,還是更依賴於編碼值?
總之,我只是想了解協議緩衝區上的內存空間使用情況。我討厭易於使用的交易,因爲存儲配置數據所需的內存空間大量增加。謝謝!