의 내부는 내가 선택 System.String의 내부 필드를보고 반사를 사용하고 내가 세 필드 발견이 어떻게 작동하는지선택 System.String
m_arrayLength
m_stringLength
m_firstChar
가 이해가 안가.
m_arrayLength는 일부 배열의 길이입니다. 이 어레이는 어디에 있습니까? 그것은 분명히 문자열 클래스의 멤버 필드가 아닙니다.
m_stringLength가 적합합니다. 그것은 문자열의 길이입니다.
m_firstChar는 문자열의 첫 번째 문자입니다.
그럼 내 질문은 문자열의 나머지 문자는 어디입니까? 문자열 클래스에없는 경우 저장된 문자열의 내용은 어디에 있습니까?
@Marc에 대해 아무것도 없다, 나는 당신의 설명 (단지 첫 번째 비트가) 조금 혼란 생각합니다. 'm_firstChar'가'char' 인 경우, 그 주소는 문자열의 위치가 될 수 없습니다. 대신'char' 배열에있는 첫 번째 문자의 주소), 포인터의 주소를 알려주는'& m_firstChar'를 사용하는 것은 의미가 없습니다. 가능성이있는 형제들과 C#이 크게 다르지 않다면 - 나는 그것에 관해 많은 것을 알지 못합니다. – paxdiablo
@paxdiablo 디 컴파일 된 코드를 보면 첫 번째 문자가 메모리 내 문자열의 실제 첫 번째 문자라는 것을 알 수 있습니다. 따라서 주소를 가져 와서 초기 메모리 주소를 인덱싱하면 나머지 문자가됩니다. – Eilon
그래서 m_firstChar는 실제로 배열입니다 (C에서 포인터로 저하됩니다)? – paxdiablo