Преимущество стековой памяти заключается в том, что она часто выделяется быстрее, чем память кучи.
Однако проблема с этим, по крайней мере в конкретном случае alloca(3)
, заключается в том, чтово многих реализациях он просто уменьшает указатель стека, не принимая во внимание или не уведомляя о том, действительно ли осталось какое-либо пространство стека.
Память стека фиксируется во время компиляции или выполнения и не динамическирасширить, когда нужно больше памяти.Если вам не хватает места в стеке и вы вызываете alloca
, у вас есть шанс получить указатель на не стековую память.У вас нет возможности узнать, не вызвали ли вы переполнение стека.
Добавление: это не означает, что мы не должны использовать динамическое выделение стековой памяти;если вы
- в строго контролируемой и контролируемой среде, такой как встроенное приложение, где пределы стека известны или могут быть установлены
- , тщательно отслеживая все выделения памятичтобы избежать переполнения стека
- , гарантируя, что вы не наберете достаточно ресурсов, чтобы вызвать переполнение стека
, тогда выделение стека в порядке и даже может быть полезно для экономии времени (движениеуказатель стека - это все, что происходит) и память (вы используете предварительно выделенный стек, а не загружаете его в кучу).