Что такое Идентификатор Trailing Array?
P.S: Googling этот термин дает. Векторы реализуются с использованием идиомы конечного массива, поэтому они не изменяются по размеру без изменения адреса самого векторного объекта.
Что такое Идентификатор Trailing Array?
P.S: Googling этот термин дает. Векторы реализуются с использованием идиомы конечного массива, поэтому они не изменяются по размеру без изменения адреса самого векторного объекта.
Если вы имеете в виду идентификатор конечного массива, упомянутый в исходный код GCC (откуда приходит ваша цитата), похоже, это ссылка на старый C трюк для реализации динамического массива:
typedef struct {
/* header */
size_t nelems;
/* actual array */
int a[1];
} IntVector;
где массив будет создан с помощью
IntVector *make_intvector(size_t n)
{
IntVector *v = malloc(sizeof(IntVector) + sizeof(int) * (n-1));
if (v != NULL)
v->nelems = n;
return v;
}
Кажется, это относится к массивам в структурах, которые могут иметь переменный размер массива. См:
http://blogs.msdn.com/b/oldnewthing/archive/2004/08/26/220873.aspx а также http://sourceware.org/gdb/current/onlinedocs/gdbint/Support-Libraries.html
Еще один совет, если вы Google для выражения положите выражение в "как" trailing array", это даст вам более конкретные результаты. Google знает о трейлинг-массивах.
Я думаю, что имеется в виду:
struct foo {
... some data members, maybe the length of bar ...
char bar[]; /* last member of foo, char is just an example */
};
Используется путем выделения с помощью malloc(sizeof(struct foo)+LEN)
, где LEN - желаемая длина bar
. Таким образом, требуется только один malloc. []
может использоваться только с последним членом структуры.
И, поскольку я понимаю документ GCC, struct foo
также может быть (только разумно) использован как последний член другой структуры, поскольку размер хранилища не фиксирован - или как указатель.