C+string 의 내부 가 어떤 지 깊이 탐구 하 다.
C+string 은 C 언어 에서 의 전신 과 는 전혀 다르다.우선,가장 중요 한 차이 점 이기 도 합 니 다.C+string 은 포함 하 는 문자 배열 의 물리 적 표 시 를 숨 겼 습 니 다.프로그램 설계 자 는 배열 의 차원 이나\0 방면 의 문제 에 관심 을 가 질 필요 가 없다.
string 은 내부 에 메모리 와 용량 에 관 한 정 보 를 밀봉 했다.구체 적 으로 말 하면 C+string 대상 은 메모리 의 시작 위치,포 함 된 문자 시퀀스 와 문자 시퀀스 의 길 이 를 알 고 있 습 니 다.메모리 공간 이 부족 할 때 string 은 모든 문자 배열 을 수용 할 수 있 는 크기 로 메모리 공간 을 자동 으로 조정 합 니 다.
C+string 의 이러한 방법 은 C 언어 프로 그래 밍 에서 가장 흔 하고 파괴 적 인 세 가지 오 류 를 크게 감소 시 켰 다.
4.567917.배열 이 경 계 를 넘는다4.567917.초기 화 되 지 않 거나 잘못된 값 의 지침 을 통 해 배열 원 의 장 애 를 방문 합 니 다4.567917.배열 이 차지 하 는 메모 리 를 방출 했 지만'허공'지침 을 유지 했다.
C++표준 은 string 류 의 메모리 레이아웃 을 정의 하지 않 았 습 니 다.각 컴 파일 러 업 체 는 서로 다른 실현 을 제공 할 수 있 지만 string 의 행동 이 일치 하도록 해 야 합 니 다.이런 방법 을 채택 하 는 것 은 충분 한 유연성 을 얻 기 위해 서 이다.
특히,C++표준 은 어떤 정확 한 상황 에서 string 대상 에 게 메모리 공간 을 할당 하여 문자 순 서 를 저장 해 야 하 는 지 정의 하지 않 았 습 니 다.string 메모리 할당 규칙 은 명확 하 게 규정 되 어 있 습 니 다.허용 되 지만 참조 계수(reference counting)로 이 루어 지 는 것 을 요구 하지 않 습 니 다.그러나 인용 계 수 를 사용 하 든 말 든 그 의 미 는 일치 해 야 한다.
C++의 이러한 방법 은 C 언어 와 달리 C 언어 에서 모든 문자 배열 은 각자 의 물리 적 저장 소 를 차지한다.C++에서 독립 된 몇 개의 string 대상 이 차지 할 수도 있 고 각자 의 특정한 물리 적 저장 소 를 차지 하지 않 을 수도 있 습 니 다.그러나 인용 계수 로 같은 데 이 터 를 저장 하 는 복사 본 을 피 할 수 있다 면 각 독립 된 대상(처리 상)은 각자 의 저장 소 를 독점 적 으로 가지 고 있 는 것 처럼 보 여야 합 니 다.예 를 들 면:
// #include<bits/stdc++.h>
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1("12345");
string s2 = s1;
cout << (s1 == s2) << endl;
s1[0] = '6';
cout << "s1 = " << s1 << endl; // 62345
cout << "s2 = " << s2 << endl; // 12345
cout << (s1 == s2) << endl;
return 0;
}
GCC 에서 의 실행 결과:1
s1 = 62345
s2 = 12345
0
문자열 이 수정 되 었 을 때 만 각자 의 복사 본 을 만 듭 니 다.이 를 작성 할 때 복사(copy-on-write)정책 이 라 고 합 니 다.문자열 이 값 매개 변수(value parameter)나 다른 읽 기 전용 상황 에서 만 사용 되면 시간 과 공간 을 절약 할 수 있 습 니 다.
라 이브 러 리 의 실현 이 인용 계 수 를 사용 하 든 말 든 string 류 사용자 에 게 는 투명 해 야 합 니 다.안 타 깝 게 도 상황 이 늘 그렇지 는 않다.다 중 스 레 드 프로그램 에 서 는 인용 수 를 안전하게 사용 할 수 없다.
C++string 의 내부 가 어떤 것 인지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C++string 내부 가 어떤 내용 인지 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu 1717 소수 화 점수 2 (수학)소수 화 점수 2 레이 는 수학 시간 에 선생님 의 말씀 을 듣 고 모든 소수 가 점수 로 표시 되 는 형식 이 라 고 말 했다. 그 는 녹 기 시 작 했 고 곧 완성 되 었 다. 그러나 그 는 또 하나의 문 제 를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.