C# 메모리 할당 및 dynamic 요약
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";
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.