c/c++ sizeof
实验平台:win7 64位 code blocks
定义
sizeof是操作符
作用:返回一个对象或类型所占的内存字节数。
返回值类型为size_t。
(size_t在头文件stddef.h中定义,它依赖于编译系统的值,一般定义为 typedef unsigned int size_t)
语法
- sizeof (object); //sizeof (对象)
- sizeof object; //sizeof 对象
- sizeof (type_name); //sizeof (类型)
使用
基本数据类型
short、int、long、float、double等内置数据类型。由于它们的内存大小和系统相关,所以在不同的系统下取值可能不同。
结构体
sizeof(结构体) = 内存对齐后的字节数
void test_struct(){ struct S1 { char a; int b; }; cout<<sizeof(S1)<<endl; //值为8,由于字节对齐,会在char之后会填充3个字节. struct S2 { int a; char b; char c; }; cout<<sizeof(S2)<<endl; //值为8,由于字节对齐,在char c之后会填充2个字节. struct S3 { }; cout<<sizeof(S3)<<endl; //值为1,空结构体也占内存. }
联合体
sizeof(联合体) = max(sizeof(联合体中的成员))
void test_union(){ union u1 { int a; float b; double c; char d; }; cout<<sizeof(u1)<<endl; //值为8 union u2 { int a; float b; double c; char d; int e[10]; }; cout<<sizeof(u2)<<endl; //值为40 }
指针
指针是用来记录一个对象的地址,所以指针的内存大小等于计算机内部地址总线的宽度。
sizeof(指针)与指针类型无关,在同一计算机下,所有的指针大小均相同。
void test_ptr(){ cout<<sizeof(double*)<<endl; //4 cout<<sizeof(float*)<<endl; //4 cout<<sizeof(int*)<<endl; //4 cout<<sizeof(char*)<<endl; //4 cout<<sizeof(bool*)<<endl; //4 }
数组
sizeof(数组) = 数组所占的内存字节数
注:当字符数组表示字符串时,其sizeof值将’/0’计算进去
当数组为形参时,其sizeof值相当于指针的sizeof值
void test_array() { char a[] = {1,2,3,4,5,6}; char b[] = "123456"; char* c = b; cout<<sizeof(a)<<endl; //6 cout<<sizeof(b)<<endl; //7 cout<<sizeof(c)<<endl; //4,所求为指针大小 }
类的实例
以string为例
void test_object(){ string a = "123456"; cout<<sizeof(a)<<endl; //4,求的是string的实例a所占字节大小 cout<<a.size() + 1<<endl; //7,求a中的字符串长度,size()不包含'\0' }
请尊重作者的劳动,转载请注明作者及原文地址(http://blog.youkuaiyun.com/lis_12/article/details/55102322).
如果觉得本文对您有帮助,请点击‘顶’支持一下,您的支持是我写作最大的动力,谢谢。