Я пытаюсь спроектировать мой первый формат файла в ProtoBuf, и я не уверен, какой из них лучше всего подходит в некоторых случаях, потому что расположение памяти / потока мне не совсем понятно.
Итак, у меня есть несколько вопросов, но все они тесно связаны:
1) Сколько стоит необязательное поле, если оно опущено?
Я думаю, что это должно стоить всего один бит , поскольку битовое поле может использоваться для пометки присутствующих / отсутствующих полей, но я точно не знаю. Вместо этого они могут использовать целый байт для каждого необязательного поля.
2) Сколько стоит повторное поле, когда оно пустое? Это также один бит, как необязательное поле, или это «заголовок поля» + один (varint) байт, чтобы сказать, что это размер 0?
3) Поскольку "байты" неявно имеют размер, действительно ли существует разница в размерах между отсутствующим необязательным полем байтов и пустым полем обязательных байтов?
[EDIT] Под «памятью» я понимал пространство, используемое в файловой системе или пропускной способности сети; Я не имел в виду оперативную память, поскольку это зависит от языка программирования.