이 값 형식 상자 질문에 관한 것입니다. (INT32) 어떻게 내부 값 형식 피할 상자
나는 IL 코드를 확인
, 내가 IL이 Int32.ToString()를 호출 발견,및 Int32.ToString 미만 중첩 방법() 더 박스 작업이 없습니다,
우리가 아는 한 값 유형이 참조 유형으로 변환하는 경우, 상자가,
및 C#은 우리에게 또 다른 방법을 제공하지 않습니다 과정 t 그의 변신.
어떻게 값 유형이 참조 클래스 (문자열)로 변환됩니까?
Console.WriteLine ("123456 {0}", 3.ToString())을 호출하면됩니다. 값 유형 3은 참조 유형 문자열에서 어떻게 결합됩니까? 어떤 상자도 필요 없다고 말하지만, 스택 프레임의 3이 힙의 문자열로 이동하는 방법은 무엇입니까? –
@LuffyDing 값 유형 3은 힙으로 이동합니다. ToString() 메소드는 길이가 1이고 값이 50 인 유니 코드 코드 포인트를 포함하고있는'string * '으로 * 발생하는 * 전혀 관련이없는 새로운 객체를 생성합니다 (이 객체는 모양이' 3'')과 아마도 터미네이터가 없지만 스택의 원래 값과 거의 관련이 없습니다.이 값은 –
에서 "itoa"스타일 연산을 실행 한 값입니다. ldstr','ldc.i4.3','call' (int.ToString()),'call' (string.Format (string, string)),'call' (Console.WriteLine (string)) (줄이거 나 가져 가라. 실제로'int.ToString' 호출을하기 위해'stloc' /'ldloca' 쌍을 사용해야한다.) –