От чего зависит размер стека потока

«От чего зависит размер стека потока» — вопрос из категории Linux, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Размер стека потока в Go определяется при создании горутины и зависит от нескольких факторов:

  1. Go версия – в новых версиях размер может меняться (например, в 1.4 уменьшили с 8KB до 2KB)
  2. ОС и архитектура – разные платформы могут иметь разный минимальный размер
  3. Переменная окружения GODEBUG – можно задать GODEBUG=asyncpreemptoff=1 для отключения асинхронной преемпции и увеличения стека
  4. Флаг -stack – при сборке можно указать начальный размер стека (например, -stack=4096)

По умолчанию:

  • 2KB для 32-битных систем
  • 4KB для 64-битных систем

Пример проверки:

func main() {
    var x int
    println(unsafe.Sizeof(x)) // размер переменной
}