当我们使用STL容器的时候,首先要进行容器的声明,比如:
stack s;
map<int, int> m;
容器的实现是一个个模板类,而这些模板类实例化以后的对象,所占的内存空间是多少呢?代码验证如下。
下面的代码将常用的容器先声明,然后直接使用sizeof()查看变量所占内存大小:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <iostream>
#include <map>
#include <set>
#include <list>
#include <stack>
#include <queue>
#include <deque>
#include <unordered_set>
#include <unordered_map>
using namespace std;
int main()
{
stack<int> s_stack;
cout << "sizeof(stack) = " << sizeof(s_stack) << endl << endl;
list<int> l_list;
cout << "sizeof(list) = " << sizeof(s_stack) << endl << endl;
queue<int> q_queue;
cout << "sizeof(queue) = " << sizeof(s_stack) << endl << endl;
deque<int> d_deque;
cout << "sizeof(deque) = " << sizeof(d_deque) << endl << endl;
set<int> s_set;
cout << "sizeof(set) = " << sizeof(s_set) << endl << endl;
map<int, int> m_map;
cout << "sizeof(map) = " << sizeof(m_map) << endl << endl;
multiset<int> s_multiset;
cout << "sizeof(multiset) = " << sizeof(s_multiset) << endl << endl;
multimap<int, int> m_multimap;
cout << "sizeof(multimap) = " << sizeof(m_multimap) << endl << endl;
unordered_set<int> s_unordered_set;
cout << "sizeof(unordered_set) = " << sizeof(s_unordered_set) << endl << endl;
unordered_map<int, int> m_unordered_map;
cout << "sizeof(unordered_map) = " << sizeof(m_unordered_map) << endl << endl;
system("pause");
return 0;
}
结果如下:
可以看到,不同的容器,也就是一个个模板类,所占的内存是不尽相同的(完美的废话。。。)
注意,上面的大小,是类的大小(容器使用类实现),而不是容器中插入的变量所占空间的大小。当向一个容器中插入变量时,上面的sizeof()值并不会改变。
验证如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> s_stack;
cout << "before insert sizeof(stack) = " << sizeof(s_stack) << endl;
for (int i = 0; i < 1000; ++i)
{
s_stack.push(i);
}
cout << "stack.size() = " << s_stack.size() << endl;
cout << "after insert sizeof(stack) = " << sizeof(s_stack) << endl;
system("pause");
return 0;
}
运行结果如下:
如上,向stack()中插入了1000个变量,栈的大小是1000,但是变量名s_stack()的大小仍然是不变的。
谢谢阅读