【C++】sizeof()函数解析
2016-11-23 09:12
141 查看
【1】 常见数据类型的的sizeof函数得出的值表
【2】 数组求sizeof 的值
数组的大小 = 数组中元素的个数 x 该类型的大小
【3】 union 求 sizeof 的值
由于 union 中存在复写现象,union 结构的 sizeof 的值即为 union 中最大的元素的大小。例如;
【4】 struct 中求 sizeof 的值
struct 没有复写的情况,但是它的 sizeof 情况比较复杂,因为存在补位的情况,例如下面的例子
【5】 类对象的 sizeof 大小
【5.1】 一个空类,里面任何函数也没有,它的对象的 size 是多少?
大小为1。不是0的原因是当我们申明了一个对象的时候,系统就需要为其分配资源,所以一定不是0。
【5.2】 如果我们在空类中加入了构造函数和析构函数,size 是多少?
大小还是1,因为函数和对象是分离的。
【5.3】 如果是虚函数呢?
虚函数,每个类的对象中都会有一个指向虚函数的指针,所以大小要增加,在32位中,size为4个字节,在64位中为8个字节。
char | int | short | long | float | double | 指针 | |
32 bit | 1 | 4 | 2 | 4 | 4 | 8 | 4 |
64 bit | 1 | 4 or 8 | 2 | 8 | 4 | 8 | 8 |
数组的大小 = 数组中元素的个数 x 该类型的大小
【3】 union 求 sizeof 的值
由于 union 中存在复写现象,union 结构的 sizeof 的值即为 union 中最大的元素的大小。例如;
union student{ int id; double score; }这个 union 中的最大的元素是double,所以它的 sizeof 就是8。
【4】 struct 中求 sizeof 的值
struct 没有复写的情况,但是它的 sizeof 情况比较复杂,因为存在补位的情况,例如下面的例子
struct stu{ char s; int i; }它的大小不是简单的 1 + 4 = 5,而是8。因为 struct 的 size 一定是最大成员的整数倍,如果其中有元素不需要最大元素那么大的位置的话,就空着。所以上例的 struct 的大小为8。下一个例子
struct stu1{ char a; char b; int c; } struct stu2{ char a; int c; char b; }虽然 stu1 和 stu2 的元素是一样的,只是顺序不一样,但是因为补位的原因,第一个的 size 为8字节,而第二个的 size 为 12 字节。
【5】 类对象的 sizeof 大小
【5.1】 一个空类,里面任何函数也没有,它的对象的 size 是多少?
大小为1。不是0的原因是当我们申明了一个对象的时候,系统就需要为其分配资源,所以一定不是0。
【5.2】 如果我们在空类中加入了构造函数和析构函数,size 是多少?
大小还是1,因为函数和对象是分离的。
【5.3】 如果是虚函数呢?
虚函数,每个类的对象中都会有一个指向虚函数的指针,所以大小要增加,在32位中,size为4个字节,在64位中为8个字节。
相关文章推荐
- C/C++ sizeof函数解析——解决sizeof求结构体大小的问题
- C/C++ sizeof函数解析——解决sizeof求结构体大小的问题
- C/C++ sizeof函数解析——解决sizeof求结构体大小的问题
- C++中类的静态数据成员函数解析
- C++ 虚函数表解析及含有虚函数的类sizeof大小
- 解决vc C++ 调用 C 函数时unresolved external symbol " __cdecl 。。。无法解析的外部符合
- c++中的strlen 函数和sizeof运算符的比较
- 函数的解析之C/C++
- c++中CreateEvent函数解析(1)
- 深入解析C++中的虚函数与多态
- C/C++ sizeof函数详解
- C++和C#中的回调函数解析
- C++使用static的错误:无法解析的外部符号、“static”不应在文件范围内定义的成员函数上使用 .
- C++ 虚函数表、函数地址、内存布局解析
- c++中WaitForSingleObject函数解析
- sizeof不是函数,而是C/C++中的一个操作符(operator)
- [转载]解析C/C++语言中的strlen与sizeof的区别
- 对比C++中sizeof与strlen函数的区别
- c++中CreateEvent函数解析(2)
- C++函数签名解析