Сколько памяти используется «отсутствующими необязательными» / «пустыми повторяющимися» полями в ProtoBuf?

Я пытаюсь создать свой первый формат файла в ProtoBuf, и я не уверен, какой вариант лучше всего в некоторых случаях, потому что структура памяти / потока мне не совсем понятна.

На самом деле у меня есть несколько вопросов, но все они тесно связаны:

1) Сколько стоит дополнительное поле, если оно опущено?

Я думаю, что оно должно стоить всего один бит , поскольку битовое поле может использоваться для отметки присутствующих / отсутствующих полей, но я не знаю наверняка. Вместо этого они могут использовать целый байт на необязательное поле.

2) Сколько стоит повторное поле, когда оно пусто? Это также один бит, как необязательное поле, или это «заголовок поля» + один (varint) байт, чтобы сказать, что это размер 0?

3) Поскольку «байты» неявно имеют размер, существует ли на самом деле размер разница между отсутствующим необязательным полем байтов и пустым полем обязательных байтов?

[РЕДАКТИРОВАТЬ] Под «памятью» я имел в виду пространство, используемое в файловой системе или пропускной способности сети; Я не имел в виду RAM, так как это будет зависеть от языка программирования.

11
задан Sebastien Diot 27 December 2011 в 22:22
поделиться