C#에서 구조체를 생성하기 위해 "new" 키워드를 사용할 때 메모리는 힙에 할당되나요, 아니면 스택에 할당되나요?
"new" 연산자를 사용하여 클래스 인스턴스를 생성하면 힙에 메모리가 할당됩니다. 그러나 "new" 연산자를 사용하여 구조 인스턴스를 생성할 때 메모리는 어디에 할당됩니까?
스택 메모리와 힙 메모리
스택은 프로그램 실행 중에 지역 변수와 메소드 호출을 저장하는 데 사용되는 데이터 구조입니다. LIFO(후입선출) 구조는 가장 최근에 할당된 메모리가 먼저 제거된다는 의미입니다.
힙은 필요에 따라 객체가 생성되고 할당되는 동적 메모리 공간입니다. 스택과 달리 특정 메모리 할당 순서를 따르지 않습니다.
구조에 대한 메모리 할당을 생성하려면 "new" 키워드를 사용하세요
구조의 경우 "new" 연산자를 사용할 때 다음 두 가지 상황을 고려해야 합니다.
매개변수 없는 생성자(new Guid();):
매개변수가 있는 생성자(new Guid(someString);):
IL 코드 생성
뒤에서 무슨 일이 일어나고 있는지 이해하기 위해 C# 컴파일러에서 생성된 중간 언어(IL) 코드를 살펴보겠습니다.
newobj
지시문은 스택에 공간을 할당하고 중간 값(예: 메서드 매개 변수)에 대해 매개 변수가 있는 생성자를 호출합니다. call instance
지시문은 매개변수화된 생성자를 사용하여 할당된 저장 위치(스택 또는 힙)를 초기화합니다. initobj
명령어는 할당된 저장소 위치(스택 또는 힙)를 초기화하여 해당 내용을 0으로 지웁니다(매개변수 없는 생성자 호출의 경우). 결론
요약하자면, 항상 힙에 메모리를 할당하는 클래스 인스턴스와 달리 구조체에 "new" 연산자를 사용하면 매개변수가 없는 생성자의 경우와 매개변수가 있는 메모리 할당의 경우 힙에 메모리가 할당됩니다. 스택에(임시 저장용) 이 동작은 생성된 IL 코드에 반영되며 기본 메모리 관리 프로세스에 대한 통찰력을 제공합니다.
위 내용은 힙 또는 스택: `new`는 C# 구조체에 대한 메모리를 어디에 할당합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!