Размер стека где?
Стек вызовов - это стек , который содержит информацию об активных вызовах функций исполняемого программного обеспечения.Он также известен как стек выполнения, стек управления или стек времени выполнения.В многопоточном программном обеспечении каждый поток имеет свой собственный стек вызовов.
Основная цель стека вызовов - управление потоком управления путем отслеживания того, куда возвращается каждый вызов функции.Когда выполняется вызов функции, для этой функции в стек помещается новый кадр стека .Когда функция возвращается, ее кадр стека выталкивается, и поток управления возвращается по адресу следующей инструкции вызывающего абонента.
Кадр стека обычно включает в себя:
- Адрес возврата обратно квызывающая сторона
- Параметры, передаваемые в функцию
- Сохраненные регистры и локальные переменные
Параметры также можно передавать через регистры ЦП, но есть и недостатки (т. е.для вычисления может потребоваться ограниченное число параметров и регистров.)
Аналогично, все локальные переменные не имеют , которые должны быть выделены в текущем кадре стека.Языки, которые поддерживают замыкания , требуют, чтобы свободные переменные сохранялись после возврата функции, но локальные объекты в стеке вызовов освобождаются, когда текущий кадр стека выталкивается и управление возвращается вызывающей стороне.
MyДело в том, что передача параметров и распределение локальных объектов определяются реализацией языка и компилятора;Вы не должны предполагать, что они всегда существуют в стеке.
Что означает stack_size?Какое значение по умолчанию 0?
Из документации MSDN по _beginthread , найденной в разделе Замечания :
Операционная системаобрабатывает выделение стека при вызове _beginthread или _beginthreadex ;вам не нужно передавать адрес стека потоков ни одной из этих функций.
Кроме того, аргумент stack_size может быть 0, и в этом случае операционная система использует то же значение, что и стек, указанный для основного потока.