C, C++/WINDOWS VIA C,C++

[WINDOWS VIA C/C++] 16. 스레드 스택

Basaeng 2025. 11. 1. 15:38

https://www.hanbit.co.kr/store/books/look.php?p_code=B2974835990

해당 책을 읽고 학습 목적으로 간단하게 정리한 글입니다.


개요

시스템은 스레드가 생성되면 스레드만의 스택의 크기를 예약한다.

미리 1MB를 reserve하고 2페이지를 commit한다.

 

링커의 옵션을 통해 크기를 바꿀 수 있다.

추가적으로 CreateThread, _beginthreadex를 통해 생성하는 스레드의 스택 크기를 지정할 수 있다.

 

처음에 커밋된 페이지 중 상위 주소의 페이지는 가드 페이지이다.

만약 프로그램의 스택 포인터가 가드 페이지를 가리키게 될 경우, 그 다음 reserve 페이지를 커밋하고 원래의 페이지의 가드를 해제하고 새로운 페이지를 가드 페이지로 설정한다. 

 

스택의 최하위 페이지는 가드페이지로 설정되지 않으며 이 경우 StackOverflow가 발생한다.

 

책의 예시에서는 SEH를 활용해 이를 처리하는 방법을 보여준다.

 

가드페이지를 벗어나면서도 커밋된 다른 스레드의 페이지를 접근하는 경우 이는 잡아내기 어렵기 때문에 매우 주의해야 한다.


런타임 라이브러리의 스택 확인 함수

C런타임 라이브러리는 스택을 확인하는 함수를 가지는데 컴파일러는 확인이 필요할 때 이를 알아서 집어넣어 준다.

 

자세한 설명은 생략

 

간단한 파트이다.