Какой размер стека потока по умолчанию в Linux?

«Какой размер стека потока по умолчанию в Linux?» — вопрос из категории Linux и ОС, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

По умолчанию в большинстве дистрибутивов Linux размер стека основного потока процесса составляет 8 МБ. Это значение можно проверить и изменить.

Практическая проверка:

  1. Командой в терминале: ulimit -s (покажет размер в килобайтах).
  2. Программно на C++:
#include <iostream>
#include <sys/resource.h>

int main() {
    rlimit limit;
    if (getrlimit(RLIMIT_STACK, &limit) == 0) {
        std::cout << "Soft stack limit: " << limit.rlim_cur / 1024 / 1024 << " MBn";
        std::cout << "Hard stack limit: " << limit.rlim_max / 1024 / 1024 << " MBn";
    }
    return 0;
}

Важные нюансы из опыта:

  • Для потоков, создаваемых std::thread или pthread_create, размер стека по умолчанию обычно берётся из атрибутов потока и может отличаться (часто 2-8 МБ). Его можно задать явно.
  • При работе с рекурсивными алгоритмами или большими локальными массивами (int buffer[100000]) легко получить переполнение стека. В таких случаях я либо выделяю память в куче (через std::vector), либо увеличиваю лимит с помощью pthread_attr_setstacksize.
  • В embedded-системах этот лимит часто значительно меньше (порядка десятков или сотен килобайт).