생각도 못했다가 C++26 변경점 살펴보다 알게 됨 ㄷㄷ


C++에 익숙한 사람이라면 다들 알듯이 지나치게 큰 지역변수는 스택 오버플로를 일으킬 수 있다


하지만 정적지역변수는 스택이 아닌 정적 메모리 공간에 저장되므로 (데이터 영역) 스택오버플로를 일으키지 않는다


하지만 정적지역변수 자체가 아닌 정적지역변수의 정의는 스택오버플로를 일으킬 가능성이 있었다는 사실 ㄷㄷ




예를 들어 벡터는 초기화 리스트를 통해 정의되고 있는데


C++26 이전까지는 초기화 리스트를 통해 정적 지역변수를 정의할 경우


"스택"에 보조 배열을 만든 후 이를 다시 정적 메모리 공간의 정적 지역변수 객체 생성에 사용하는 방식으로 구현되었었다고 한다


C++26에서는 이짓거리를 못하게 초기화 리스트부터 정적 메모리 공간에서 생성되도록 강제했다고 한다



정말 상상도 못한 곳에서 튀어나오는 함정들 ㄷㄷ