Я хотел бы знать, как управляется массив переменной длины (какие дополнительные переменные или структуры данных хранятся в стеке, чтобы иметь массивы переменной длины).Array переменной длины
Большое спасибо.
Я хотел бы знать, как управляется массив переменной длины (какие дополнительные переменные или структуры данных хранятся в стеке, чтобы иметь массивы переменной длины).Array переменной длины
Большое спасибо.
Это просто массив с динамическим размером (зависит от реализации, но чаще всего в стеке). Это очень похоже на alloca
в старые времена, за исключением того, что sizeof
вернет фактический размер массива, что означает, что размер массива также должен быть где-то сохранен (зависит от реализации, но, вероятно, и от стека).
Размер массивов переменной длины определяется во время выполнения, а не во время компиляции.
Способ, которым он управляется, зависит от компилятора.
GCC, например, выделяет память в стеке.
Но нет особой структуры. Это обычный массив, размер которого известен во время выполнения.
В качестве альтернативы вы можете использовать некоторые контейнеры, например. ArrayList в java или vector в c/C++
-1 не имеет ничего общего с вопросом (как может быть реализована функция C99). –
Это не совсем так, потому что не удалось опросить размер массива 'alloca()' после его создания, но 'sizeof' работает с VLAs (так что если вы вызываете 'sizeof' в массиве, этот размер должен храниться где-то). – caf
@caf: хорошая точка - я думаю, что размер также должен быть где-то сохранен (зависит от реализации), тогда - я обновлю свой ответ. –