Вы должны сделать это до создания потока, инициализируя pthread_attr_t
объект и вызывая pthread_attr_getstacksize
для него. Если вы знаете, что текущий поток был создан с атрибутами по умолчанию, вы, возможно, могли бы отложить тест до более позднего периода, но это звучит как плохая идея.
С учетом сказанного, я думаю, что тестирование по умолчанию в любом случае довольно бесполезно. Если вы знаете, что вам нужен большой стек, перед созданием потока явно установите большой размер стека. Если вы знаете, что вам нужен только небольшой стек, явно установите его и наслаждайтесь экономией памяти. Я бы рекомендовал не опускаться ниже 32 КБ, если вы не знаете, что не будете использовать какие-либо библиотечные функции или рекурсию (в этом случае, вероятно, подходит 4 КБ), и не должны превышать 256 КБ, если вы не собираетесь выполнять глубокую рекурсию. Грубая оценка, которую я бы использовал для получения безопасного размера стека для рекурсии:
levels_of_recursion * (128 + total_size_of_locals) + (using_lib ? 32768 : 4096)