Помимо уже рассмотренных точек, когда именно пространство освобождается, и является ли эта конструкция поддерживается на всех, есть и это:
- В
alloca
случае bytes
имеет тип указателя.
- В случае
[]
, bytes
имеет тип массива.
Самая заметная разница в том, что такое sizeof(bytes)
; для указателя это размер указателя (sizeof(void *)
), тогда как для массива это размер выделенного пространства (sizeof(char) * size
, который = size
для этого случая с sizeof(char)
= 1).
(Кроме того, в вашем примере, типы элементов различны;., Что же, первый должен быть изменен на char *bytes = alloca(size)
)
Ответ критически зависит от того, является ли 'size' константой времени компиляции. Это? – AnT
нет, размер есть, для всех целей и целей, аргумент функции –
Это не имеет значения. Apple по умолчанию использует '--std = gnu99', который поддерживает оба. 'alloca()' является расширением GNU, а массив переменной длины - совместимой с C99 функцией. –