c++中sizeof 有容器的结构体问题

lestergyl 2014-05-27 10:49:34
比如一个结构里面有容器
struct a
{
int a;
map<int ,string>my_map;
};
我用vs测试不同的对象得到的大小都是相同的,这是为什么? 这种有容器的结构体sizeof到底怎么求呢?
...全文
355 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lestergyl 2014-05-28
  • 打赏
  • 举报
回复
非常详细的解答 ,谢谢啦!
Fire_Lord 2014-05-28
  • 打赏
  • 举报
回复
引用 7 楼 Fire_Lord 的回复:
sizeof(type) 一般是计算其实例在栈上所占用的空间,例如:

    cout << "sizeof(double): " << sizeof(double) << endl; // 8
	double *pD = new double(100.1);
	cout << "sizeof(pd): " << sizeof(pD) << endl;		  // 4
	cout << "sizeof(double*): " << sizeof(double*) << endl;//4
pD 指向的内存空间为 double,但pD本身所占用的只是一个指针的字节数,4字节。 对于Map 也是一样,Map 内部主要是通过树结构实现的,其包含三个指针

std::_Tree_node<std::pair<int const ,double>,void *> *  _MyHead;
unsigned int  _MySize;
std::_Container_proxy *  _MyProxy;
具体每个指针对应的细节,楼主有兴趣可以研究一下STL 源码。 所以 sizeof(map<typea, typeb>) 等价于 sizeof(pointer) + sizeof(pointer) + sizeof(pointer) 不管你往map里插入多少数据,sizeof 都是计算的这三个指针占用的空间。
笔误,是两个指针加一个 unsigned int sizeof(map) = sizeof(pointer) + sizeof(unsigned int) + sizeof(pointer) 希望对你有帮助
Fire_Lord 2014-05-28
  • 打赏
  • 举报
回复
sizeof(type) 一般是计算其实例在栈上所占用的空间,例如:

    cout << "sizeof(double): " << sizeof(double) << endl; // 8
	double *pD = new double(100.1);
	cout << "sizeof(pd): " << sizeof(pD) << endl;		  // 4
	cout << "sizeof(double*): " << sizeof(double*) << endl;//4
pD 指向的内存空间为 double,但pD本身所占用的只是一个指针的字节数,4字节。 对于Map 也是一样,Map 内部主要是通过树结构实现的,其包含三个指针

std::_Tree_node<std::pair<int const ,double>,void *> *  _MyHead;
unsigned int  _MySize;
std::_Container_proxy *  _MyProxy;
具体每个指针对应的细节,楼主有兴趣可以研究一下STL 源码。 所以 sizeof(map<typea, typeb>) 等价于 sizeof(pointer) + sizeof(pointer) + sizeof(pointer) 不管你往map里插入多少数据,sizeof 都是计算的这三个指针占用的空间。
xiaohuh421 2014-05-28
  • 打赏
  • 举报
回复
sizeof是编译期间计算的, 而你map中要有内容,需要等到程序运行期间. sizeof只能计算出map 对象本身占用空间大小, 而不能计算它的容量.
  • 打赏
  • 举报
回复
和具体的容器的实现有关,最好不要这么做
sdghchj 2014-05-28
  • 打赏
  • 举报
回复
stl对象里一般支持自动扩展,想来里面应该有一个是指向数据区域指针。
ri_aje 2014-05-28
  • 打赏
  • 举报
回复
非静态成员变量大小 + 必要的对齐。 主楼的问题在于 sizeof(map) 的大小不返回 map 中存储元素的总大小。
lestergyl 2014-05-27
  • 打赏
  • 举报
回复
我知道不能那么求,但我想知道我sizeof这样一个对象得到的数值是怎么来的?
ningto.com 2014-05-27
  • 打赏
  • 举报
回复
不能用sizeof求容器的大小的,谁知道它里面内存是怎么分配的。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧