{C \ #} string 의 내부

1214 단어
string 내부 의 데이터 구 조 는 놀 라 울 정도 로 간단 합 니 다.
private int  m_stringLength;
private char m_firstChar;

문자열 의 동작 에 대해 내 부 는 모두 unsafe code 입 니 다.
char* ap = &strA.m_firstChar

여기 서 string 의 쉽 지 않 음 이 드 러 났 다.왜 mfirstChar (값 형식 char) 의 주 소 는 문자열 을 대신 할 수 있 습 니까?
char a = 'a';
char* pa = &a;

파 를 통 해 "abcd" 를 얻 을 수 있 습 니까? 안 될 겁 니 다.
그래서 우 리 는 다시 깊이 들 어가 보 자. char 가 도대체 무엇 인지?
public struct Char
{
    internal char m_value;  
}

char 는 System. Char 의 별명 입 니 다. 비슷 한 struct 를 정의 하려 면 컴 파일 할 수 없 을 것 입 니 다. 순환 참조 와 관련 되 어 컴 파일 러 는 struct 의 크기 를 정할 수 없습니다.그러나 내장 유형 에 대해 컴 파일 러 는 크기 를 명확 하 게 알 수 있 고 '건 너 뛰 기' 검 사 를 할 수 있다.Char 는 구조 함수 가 없어 서 우 리 는 그 가 어떻게 초기 화 했 는 지, 바 텀 데이터 구조 도 모 르 고 메모리 도 어떻게 사용 하 는 지 모른다.string 의 표현 에 따 르 면 CLR 내부 에 char 에 대해 실제 적 으로 char * * 지침 이 포함 되 어 있 음 을 추측 할 수 있 습 니 다.Char 로 표 현 될 때 한 바이트 (char [0]) 만 가 져 옵 니 다.그러나 표면의 바이트 에 국한 되 지 않 고 char * 는 실제 문자열 일 수 있 습 니 다.string 의 구조 함수 에서 (그대로 보이 지 않 음) 메모리 분 배 를 완 료 했 고 첫 주 소 를 m 에 포함 시 켰 습 니 다.firstChar 에서 (m value 의 접근 유형 은 internal 임 을 주의 하 십시오) 길이 mstringLength, 이렇게 하면 설명 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기