C# 스택 크기가 여전히 1MB인 이유는 무엇입니까? 역사적, 기술적 이유 살펴보기
최신 PC에는 충분한 물리적 메모리가 있지만 C#의 스택 크기는 32비트 프로세스의 경우 1MB, 64비트 프로세스의 경우 4MB로 유지되어 겉보기에 임의적인 제한 뒤에 있는 논리에 대한 의문을 제기합니다.
역사적 기원: Windows NT의 유산
1MB의 기본 스택 크기는 원래 Windows NT 개발 중에 설정되었습니다. 실행 파일 또는 CreateThread() API 호출이 특정 스택 크기를 지정하지 않으면 운영 체제는 이 값을 기본값으로 사용합니다.
1MB를 선택한 이유
1MB 선택은 다양한 요인의 영향을 받을 수 있습니다. 첫째, 개인용 컴퓨터 초기에는 상당한 양의 메모리를 차지했다. 둘째, Windows NT의 수요 페이징 가상 메모리 아키텍처를 사용하면 스택을 가상으로 할당하여 실제 메모리에 미치는 영향을 최소화할 수 있습니다.
.NET 프로그램 과잉 할당
요구적인 기본 프로그램에는 1MB가 적당할 수 있지만 .NET 애플리케이션에는 과도한 것으로 나타났습니다. .NET에서는 문자열과 배열이 관리되는 힙에 할당되어 스택 소비를 줄입니다. 또한 안전하지 않은 포인터와 stackalloc은 거의 사용되지 않습니다.
JIT 컴파일 및 스택 사용
.NET에서 유일하게 중요한 스택 사용은 런타임 시 JIT(Just-In-Time) 컴파일 중에 발생합니다. 스택은 코드 최적화 및 예외 처리에 사용되지만 일반적으로 수만 바이트만 필요합니다.
스택 점령
.NET의 기능은 스택이 점유되어 잠재적인 스와핑을 위해 페이징 파일의 공간을 예약한다는 것입니다. 이 비용이 많이 드는 프로세스는 원래 보안 조치로 구현되었지만 이후 더 이상 사용되지 않습니다.
최신 변경 사항: 더 이상 스택 점유가 없음
최신 버전의 .NET(.NET 4.5부터 시작)에서 CLR은 성능상의 이유로 스택 호깅을 제거했습니다. 이 변경으로 인해 스택 크기가 메모리 사용량에 미치는 영향이 더욱 줄어듭니다.
결론
C#의 1MB 스택 크기는 초기 컴퓨팅 플랫폼의 한계로 인해 영향을 받은 역사적 유물입니다. 최신 하드웨어의 기능을 고려할 때 오래된 것처럼 보일 수 있지만 상대적으로 낮은 메모리 오버헤드와 대부분의 응용 프로그램에 충분한 용량으로 인해 여전히 합리적인 기본값입니다.
위 내용은 기본 C# 스택 크기가 여전히 1MB(64비트의 경우 4MB)인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!