C++ sizeof各种类型的大小
来源:互联网 发布:json字符串base64加密 编辑:程序博客网 时间:2024/06/10 07:09
C++各种类型的sizeof大小,先放测试代码和测试结果(VS2013)。
#include <iostream>using namespace std;////////// 测试基础类型 //////////int GetArraySize(char str[]){ return sizeof(str);}void TestSizeofBase(){ cout << "////////// 测试基础类型 //////////" << endl; char* pStr = "hello world"; char arrStr[] = "hello world"; cout << "char: " << sizeof(char) << endl; cout << "short: " << sizeof(short) << endl; cout << "int: " << sizeof(int) << endl; cout << "float: " << sizeof(float) << endl; cout << "double: " << sizeof(double) << endl; cout << "char*: " << sizeof(pStr) << endl; cout << "string: " << sizeof("hello world") << endl; cout << "char[]: " << sizeof(arrStr) << endl; cout << "char[] as param: " << sizeof(GetArraySize(arrStr)) << endl; cout << endl;}//////////// 测试空类 ////////////class EmptyA{};class EmptyB : public EmptyA{};struct EmptyStruct{};void TestSizeofEmpty(){ cout << "//////////// 测试空类 ////////////" << endl; cout << "EmptyA: " << sizeof(EmptyA) << endl; cout << "EmptyB: " << sizeof(EmptyB) << endl; cout << "EmptyStruct: " << sizeof(EmptyStruct) << endl; cout << endl;}////////// 测试内存对齐 //////////class AlignA{ char a;};class AlignB{ char a; short b;};class AlignC{ char a; short b; double c;};#pragma pack(1)class AlignD{ char a; short b; double c;};#pragma pack()void TestSizeofAlign(){ cout << "////////// 测试内存对齐 //////////" << endl; cout << "AlignA: " << sizeof(AlignA) << endl; cout << "AlignB: " << sizeof(AlignB) << endl; cout << "AlignC: " << sizeof(AlignC) << endl; cout << "AlignD: " << sizeof(AlignD) << endl; cout << endl;}//////////// 测试多态 ////////////class VirtualA{ virtual void test();};class VirtualB{ virtual void test(); virtual void test2();};void VirtualB::test() {}void VirtualB::test2() {}class VirtualC{ char a; virtual void test(); virtual void test2();};void TestSizeofVirtual(){ cout << "//////////// 测试多态 ////////////" << endl; VirtualB objB; cout << "VirtualA: " << sizeof(VirtualA) << endl; cout << "VirtualB: " << sizeof(VirtualB) << endl; cout << "VirtualB Object: " << sizeof(objB) << endl; cout << "VirtualC: " << sizeof(VirtualC) << endl; cout << endl;}void TestSizeof(){ TestSizeofBase(); TestSizeofEmpty(); TestSizeofAlign(); TestSizeofVirtual();}int main(int argc, char **argv){ TestSizeof(); getchar(); return 0;}
输出结果
简要说明
sizeof(GetArraySize(arrStr)) 4,是因为参数传递为形参时,把数组转为了指针。
sizeof(空类) 1,是因为实例化类需要编译器给它分配内存空间,不能分配为size为0的内存,所以编译器默认分配了一个字节,以便标记可能初始化的类实例,同时使空类占用的空间也最少(即1字节)。
内存对齐,对象的首地址能够被其最宽基本类型成员的大小所整除;每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍, 如有需要编译器会在成员之间加上填充字节(internal adding);总大小为最宽基本类型成员大小的整数倍。
虚函数,虚函数表指针,大小相当于sizeof(void *)。
1 0
- 各种类型的sizeof()大小
- C++ sizeof各种类型的大小
- sizeof<引用类型>的大小
- 关于各种类型的sizeof
- C++:类的大小(sizeof)
- 【sizeof】关于各种东西的大小_Tencent
- 深入理解计算机各种类型大小(sizeof)
- 深入理解计算机各种类型大小(sizeof)
- 深入理解计算机各种类型大小(sizeof)
- 深入理解计算机各种类型大小(sizeof)
- 深入理解计算机各种类型大小(sizeof)
- sizeof(string)---容器string类型的大小
- sizeof()保留字获取类型的大小
- C语言中 sizeof 操作符使用时的一些细节 和 指针类型的大小
- sizeof()的使用及各种数据类型的字节大小
- sizeof()的使用及各种数据类型的字节大小
- sizeof()的使用及各种数据类型的字节大小
- sizeof()的使用及各种数据类型的字节大小
- 记修改论文的感受
- 【连载】 .Net cad二次开发(二)
- YTU 2887: D--机器人Bill
- poj 1094 Sorting It All Out 【拓扑排序】
- 设置git用户名和邮箱
- C++ sizeof各种类型的大小
- SQLServer锁的概述
- C++面试题
- Centos6.5 上Ansible 对Windows 管控
- 数据中心模块化和标准化(5-1)
- Oracle建立表空间和用户
- 用apache代理实现整合多个tomcat
- 自组织映射网络和学习向量量化网络
- 链式栈