Мне любопытно и применен оператор sizeof()
на некоторых стандартных библиотечных классах C++. Вот что я заметил:sizeof() на стандартной библиотеке C++
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;
}
Выход на моей системе (64-разрядная версия):
12 24 24
12 24 24
40 40
Я знаю, что std::set
использует красно-черное дерево для реализации. Таким образом, каждый узел двоичного дерева имеет два указателя (по 8 байтов), а значение (8 байтов, всего 24) выглядит хорошо.
std::map
(также использует красно-черных деревьев) имеет дополнительный ключ, но еще 24 байт? Зачем?Почему
std::queue
иstd::stack
принимают 40 байт, аstd::vector
занимает всего 12 байт?Почему
char
иdouble
не влияет на размер класса? Это из-за шаблонов?
'sizeof' не является функцией, а является оператором и ключевым словом, определенным на языке C++. –
@BasileStarynkevitch Я обновил вопрос – banarun
Зачем вам ожидать 'sizeof (container) == sizeof (node)'? –