일부 C++ 표준 라이브러리 클래스에서 호기심을 가지고 sizeof()
연산자를 적용했습니다. 여기에 내가 관찰 한 것입니다 : 내 시스템 (64 비트)에C++ 표준 라이브러리의 sizeof()
int main()
{
vector<double> v1;
set<double> s1;
map<double,double> m1;
stack<char> st;
queue<char> q;
vector<char> v2;
set<char> s2;
map<char,char> m2;
cout<<sizeof(v1)<<" "<<sizeof(s1)<<" "<<sizeof(m1)<<endl;
cout<<sizeof(v2)<<" "<<sizeof(s2)<<" "<<sizeof(m2)<<endl;
cout<<sizeof(q)<<" "<<sizeof(st)<<endl;
return 0;
}
출력은 다음과 같습니다
12 24 24
12 24 24
40 40
나는 std::set
구현을 위해 레드 - 블랙 트리를 사용하는 것을 알고있다. 따라서 이진 트리의 각 노드에는 두 개의 포인터 (각각 8 바이트)가 있고 값 (8 바이트, 총 24)은 괜찮은 것 같습니다.
std::map
는 여전히 24 바이트 (또한 레드 - 블랙 트리를 사용) 별도의 키를 가지고 있지만? 왜?왜 과
std::stack
은 40 바이트를 차지하지만std::vector
은 12 바이트 만 사용합니까?char
과double
이 클래스 크기에 영향을주지 않는 이유는 무엇입니까? 템플릿 때문입니까?
'sizeof'는 함수가 아니라 C++ 언어로 정의 된 연산자와 키워드입니다. –
@BasileStarynkevitch 질문을 업데이트했습니다. – banarun
왜 sizeof (container) == sizeof (node)를 기대합니까? –