声明一个STL容器(变量)时,其所占的内存空间是多大?(一个无关紧要但有意思的问题)

当我们使用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()的大小仍然是不变的。

谢谢阅读

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值