C++sizeof计算各数据类型大小
2016-07-19 10:07
344 查看
sizeof的输出单位是字节,即B,1B=8b(位),测试工具为VS2013旗舰版。
我们再来看看类和结构体。
(1)空类(空结构体)
即使类中有构造函数和析构函数,还是1B,但是,当把析构函数改成虚函数:
再增加一个(多个)虚函数:
依然是4。这是因为,当有虚函数时,这个类会添加一个指针,该指针指向虚函数表,所以,不管增加多少个虚函数,类中还是只有一个指向虚函数表的指针。
(2)类中添加其他变量
计算过程:指向虚函数的指针大小(4)+int大小(4)+string大小(28)=36
(3)子类有虚函数
发现大小和基类一样,说明指向虚函数表的指针还是只有一个。
(4)数组和指针
int a[2]中的a和 int *b=new int[2]中的b大小一样吗?书上说a实际上也是指针,所以应该一样啊。
测试结果:
发现并不一样,对于数组,sizeof计算的是数组元素个数*类型大小;而指针就是一个指针的大小。(一个指针,
不管它指向哪一种数据类型,指针本身所需的内存大小是固定的.Inside The C++ Object Model)
我们再来看看类和结构体。
(1)空类(空结构体)
即使类中有构造函数和析构函数,还是1B,但是,当把析构函数改成虚函数:
再增加一个(多个)虚函数:
依然是4。这是因为,当有虚函数时,这个类会添加一个指针,该指针指向虚函数表,所以,不管增加多少个虚函数,类中还是只有一个指向虚函数表的指针。
(2)类中添加其他变量
计算过程:指向虚函数的指针大小(4)+int大小(4)+string大小(28)=36
(3)子类有虚函数
发现大小和基类一样,说明指向虚函数表的指针还是只有一个。
(4)数组和指针
int a[2]中的a和 int *b=new int[2]中的b大小一样吗?书上说a实际上也是指针,所以应该一样啊。
测试结果:
发现并不一样,对于数组,sizeof计算的是数组元素个数*类型大小;而指针就是一个指针的大小。(一个指针,
不管它指向哪一种数据类型,指针本身所需的内存大小是固定的.Inside The C++ Object Model)
相关文章推荐
- Visual C++ 在windows 7 上预编译头错误unexpected precompiled header error, simply rerunning the compiler migh
- using声明、using指示用于嵌套命名空间时的作用域
- 指针(3)
- using声明、using指示及其作用域详解
- 重载++,--操作符
- ROS学习之 cpp时间
- C++之字节对齐与结构体大小(转)
- 【C/C++】模拟实现strcpy的N种境界
- 比之前那个版本更简单的C语言实现的比较大小
- c++11 批量产生多个线程
- c++11 批量产生多个线程
- 【编程语言】C++ 遍历指定目录下的文件
- C语言经典案例
- C语言经典案例
- ROS学习之 cpp名字和节点信息
- NYOJ 懒省事的小明
- 分别用C/C++实现栈
- C语言之字节对齐
- C过渡到C++
- 大话C/C++语言自增(++)自减(--)运算符