История изменений
Исправление hateyoufeel, (текущая версия) :
Ну там главная тема в том, что с alloca() ты можешь сделать вот такой трюк:
void f(size_t n) {
void *ptr = n < TOO_BIG_FOR_STACK
? alloca(n)
: malloc(n);
...
if(n >= TOO_BIG_FOR_STACK)
free(ptr);
}
Для маленьких кусков данных получишь прирост к скорости за счёт размещения на стеке, но при этом не просрёшь его, если данных много. С VLA такое не канает.
Исправление hateyoufeel, :
Ну там главная тема в том, что с alloca() ты можешь сделать вот такой трюк:
void f(size_t n) {
void *ptr = nullptr;
if(n < TOO_BIG_FOR_STACK)
ptr = alloca(n);
else
ptr = malloc(n);
...
if(n >= TOO_BIG_FOR_STACK)
free(ptr);
}
Для маленьких кусков данных получишь прирост к скорости за счёт размещения на стеке, но при этом не просрёшь его, если данных много. С VLA такое не канает.
Исходная версия hateyoufeel, :
Ну там главная тема в том, что с alloca() ты можешь сделать вот такой трюк:
void f(size_t n) {
void *ptr = nullptr;
if(n < TOO_BIG_FOR_STACK)
ptr = alloca(n);
else
ptr = malloc(n);
...
if(n >= TOO_BIG_FOR_STACK)
free(ptr);
}
С VLA такое не канает..