Что означает следующее?Объявление вектора нулевого размера
struct foo
{
...
char bar[0]; // Zero size???
};
Я попросил своих коллег, и они сказали мне, что это то же самое, как написание void* bar
.
Насколько я знаю, C-указатель представляет собой всего лишь 4 байтовую переменную (по крайней мере, на 32-битной машине). Как компилятор знает, что bar [0] является указателем (и, следовательно, 4 байта)? Это просто синтаксический сахар?
А теперь я понимаю. Таким образом, экземпляр структуры содержится в области непрерывной памяти. Если бы бар был указателем, он указывал бы на другой фрагмент памяти. Таким образом, гибкие массивы позволяют копировать структуру с помощью одной memcopy, например. Я обнаружил, что структура в ядре Linux и на самом деле одна memcopy используется для копирования из пространства ядра в пространство пользователя. – Emiliano 2010-11-23 12:31:16
@happy_emi - В дополнение к одному «memcpy» (который является большим плюсом) он также принимает только один «malloc» (который может быть относительно дорогим, особенно если это тот объект, в котором вы их много) , – 2010-11-23 12:39:12