2010-05-03 2 views
8

Я хотел бы знать, как управляется массив переменной длины (какие дополнительные переменные или структуры данных хранятся в стеке, чтобы иметь массивы переменной длины).Array переменной длины

Большое спасибо.

ответ

4

Это просто массив с динамическим размером (зависит от реализации, но чаще всего в стеке). Это очень похоже на alloca в старые времена, за исключением того, что sizeof вернет фактический размер массива, что означает, что размер массива также должен быть где-то сохранен (зависит от реализации, но, вероятно, и от стека).

+1

Это не совсем так, потому что не удалось опросить размер массива 'alloca()' после его создания, но 'sizeof' работает с VLAs (так что если вы вызываете 'sizeof' в массиве, этот размер должен храниться где-то). – caf

+0

@caf: хорошая точка - я думаю, что размер также должен быть где-то сохранен (зависит от реализации), тогда - я обновлю свой ответ. –

1

Размер массивов переменной длины определяется во время выполнения, а не во время компиляции.
Способ, которым он управляется, зависит от компилятора.
GCC, например, выделяет память в стеке.
Но нет особой структуры. Это обычный массив, размер которого известен во время выполнения.

-2

В качестве альтернативы вы можете использовать некоторые контейнеры, например. ArrayList в java или vector в c/C++

+0

-1 не имеет ничего общего с вопросом (как может быть реализована функция C99). –

Смежные вопросы