C# 메모리 할당 및 dynamic 요약

2706 단어
... 에서 인용하다https://blog.csdn.net/tran119/article/details/81412188 https://blog.csdn.net/luoye4321/article/details/353546191, C# 메모리 할당: C# 메모리에는 스택, 스택, 글로벌/정적 스토리지, 상수 스토리지, 자유 스토리지가 포함됩니다.더미: 이곳의 더미는 위탁 관리 더미입니다. 그들의 방출은 우리가 관여할 필요가 없습니다. 프로그램이 끝난 후에 운영 체제가 자동으로 회수할 것입니다.자유 저장소: 우리가 수동으로 신청하고 풀어야 하는 더미 창고입니다. 당연히 저장된 것은 국부 변수 전역/정적 저장소입니다. 저장된 것은 전역 변수와 정적 변수 상수 저장소입니다. 안에 저장된 것은 상수 2이고 CLR 메모리가 공공 언어를 분배하여 실행할 때 자바와 같은 jvm는 OS에 직접 구축된 가상 환경이고 주요 임무는 코드 운행을 관리하는 것입니다.CLR은 현재 수십 개의 현대 프로그래밍 언어를 지원하여 코드를 작성한 다음에 중간 언어 (IL) 코드로 실행된다.
CLR 메모리 분배는 세 개의 큰 구역으로 나뉘는데 그것이 바로 창고, GC더미, 큰 대상더미이다.CLR이 메모리를 로드하면 큰 개체 더미(LOH – large object heap)와 작은 개체 쌍(SOH – small object heap) 두 개가 초기화됩니다.SOH의 경우 대상자는 쓰레기 수거를 한 번 수행한 뒤 차세대로 진입한다.즉 쓰레기 수거를 처음 수행할 때 살아남은 대상이 1세대에 진입하고, 2차 쓰레기 수거 이후에도 해당 대상이 쓰레기 수거로 취급되지 않으면 2세대 대상이 된다는 것이다.2세대 대상은 가장 오래된 대상이고 대수를 높이지 않는다.세대 관점에서 볼 때 큰 대상은 2세대 대상에 속한다. 왜냐하면 2세대가 회수할 때만 큰 대상을 처리하기 때문이다.3, dynamic 소결 dynamic 은 FrameWork 4.0의 새로운 특성.dynamic의 등장으로 C#은 비약한 언어 유형의 특성을 가지게 되었습니다.컴파일러가 컴파일할 때 형식을 검사하지 않습니다. 컴파일러 기본dynamic 대상은 원하는 모든 기능을 지원합니다.... 에서 인용하다https://kb.cnblogs.com/page/92947/var, dynamic 및 object의 얽매임:
var과dynamic: var과dynamic는 완전히 두 개념이므로 함께 놓고 비교해서는 안 된다.var는 실제적으로 컴파일러가 우리에게 던진'문법사탕'이다. 컴파일되면 컴파일러는 var 변수의 실제 유형과 자동으로 일치하고 실제 유형으로 이 변수의 설명을 대체한다. 이것은 우리가 인코딩할 때 실제 유형으로 설명하는 것처럼 보인다.한편,dynamic가 컴파일된 후 실제는object 형식이다. 단지 컴파일러는dynamic 형식을 특수 처리하여 컴파일하는 동안 어떠한 형식 검사도 하지 않고 유형 검사를 실행기에 놓았다.
var 키워드는 명령어에 불과합니다. 컴파일러가 변수의 초기화 표현식에 따라 유형을 추정합니다.var은 유형이 아닙니다.
dynamic dynamicObject = new object();
var anotherObject = dynamicObject;

anotherObject의 유형은dynamic입니다. 컴파일러는dynamicObject라는 대상의 유형에 따라 자동으로 anotherObject에 이 유형을 추정하고 실제 형식으로 변수의 성명을 대체합니다.
dynamic 및 object:
object objExample = 10;
Console.WriteLine(objExample.GetType());

분명히 System을 내보냅니다.Int32. 하지만 정적 유형이 System이기 때문입니다.Object 를 사용하려면 다음과 같은 명시적 변환이 필요합니다.
objExample = (int)objExample + 10; //             ,      
        

System 에서 사용할 수 있으므로 다양한 유형의 값을 지정할 수 있습니다.Object 상속:
 objExample = "test"      

동적 유형은 백그라운드에서 System을 사용합니다.Object 유형그러나 Object와 달리 동적 유형은 컴파일할 때 명시적 변환 작업을 수행하지 않아도 됩니다. 즉, 런타임에만 유형을 식별하기 때문입니다.
dynamic dynamicExample = 10;
Console.WriteLine(dynamicExample.GetType());     

이 코드는 System을 내보냅니다.Int32. 런타임에만 유형을 식별하므로 다음 행에서는 변환할 필요가 없습니다.
dynamicExample = dynamicExample + 10;   

컴파일할 때 정적 형식 검사를 하지 않기 때문에 컴파일링이 통과됩니다. 실행할 때 이 동작을 지원하면 덧붙이고 지원하지 않으면 오류가 발생합니다.다음 유형의 값을 dynamicExample에 지정할 수 있습니다.
 dynamicExample = "test";   

좋은 웹페이지 즐겨찾기