LINUX.ORG.RU

История изменений

Исправление 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 такое не канает..