Как получить размер стека текущего потока через C API на Mac OS X? (без какао или углерода) - PullRequest
2 голосов
/ 24 января 2011

В Unix есть функция getrusage для получения статуса ресурса.Он есть и в Mac OS X, но он не работает.На Какао есть предварительно реализованный API (я не знаю о Carbon),

-[NSthread stackSize]

, но я должен реализовать его только с C API.

Что такое эквивалентный C API с этим

1 Ответ

1 голос
/ 24 января 2011

Вы должны сделать это до создания потока, инициализируя pthread_attr_t объект и вызывая pthread_attr_getstacksize для него. Если вы знаете, что текущий поток был создан с атрибутами по умолчанию, вы, возможно, могли бы отложить тест до более позднего периода, но это звучит как плохая идея.

С учетом сказанного, я думаю, что тестирование по умолчанию в любом случае довольно бесполезно. Если вы знаете, что вам нужен большой стек, перед созданием потока явно установите большой размер стека. Если вы знаете, что вам нужен только небольшой стек, явно установите его и наслаждайтесь экономией памяти. Я бы рекомендовал не опускаться ниже 32 КБ, если вы не знаете, что не будете использовать какие-либо библиотечные функции или рекурсию (в этом случае, вероятно, подходит 4 КБ), и не должны превышать 256 КБ, если вы не собираетесь выполнять глубокую рекурсию. Грубая оценка, которую я бы использовал для получения безопасного размера стека для рекурсии:

levels_of_recursion * (128 + total_size_of_locals) + (using_lib ? 32768 : 4096)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...