首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

sizeof() in C++, confuse.解决方法

2012-02-17 
sizeof() in C++, confuse...#includevector#includeiostreamusingstd::vectorintmain(){vector int

sizeof() in C++, confuse...
#include   <vector>  
            #include   <iostream>  
            using   std::vector;  
            int   main()  
            {  
                vector <int>   inet(10);  
                std::cout < <sizeof(inet) < <std::endl;  
                return   0;  
            }  
我想看看这样用sizeof()能得到什么,是不是会向对数组那样得到整个数组的大小,结果显示无论元素是10个还是n个,运行结果都是20,为什么?sizeof()到底返回了什么的大小?

[解决办法]
sizeof() 是个编译期行为

无论你vector.size()是多少,都是一样的,都是sizeof(std::vector),

vector里的数据是在堆上的,是运行时分配的
[解决办法]
sizeof得到的永远是这个对象本身的大小。
但一个对象很小,不代表它内部不可以拥有指向很大的缓冲区的指针。

这就好比一个指针变量的大小只有4个字节,不代表它所指向的对象的大小也必须都是4个字节。

你想获得vector中元素的个数,应该使用vector::size成员函数;想获得已分配缓冲区的大小,可以使用vector::capacity成员函数。
[解决办法]
vector中数据是_Allocator来分配。就算是default的_Allocator也要看STL的具体实现。可不一定是在堆上。
大多数的STL好象都是用内存池的,不过最近听说内存池又不划算了。又改回用new了。

热点排行