Sizeof
sizeof是编程语言C语言和C++中的操作符。它能表示数据类型或对象的存储大小(内存字节数)[1],存储大小以一个char大小的单位来衡量。因此sizeof (char)等于1 。被计算的数据类型不仅可以是原始类型,例如整数和浮点类型,还可以是指针类型和复合数据类型(联合体、结构体和 C++类)。
语法
sizeof
返回的是size_t
数据类型。对于变量作为运算数,可以不加括号;对于数据类型作为运算数,必须加括号。例如:
char c;
printf ("%zu,%zu\n", sizeof c, sizeof (int));
template <typename... Args>
std::size_t GetSize (Args&&... args)
{
/* Get size of parameter pack.*/
std::size_t Count= sizeof... (args);
return Count;
}
C99支持结构的“可灵活数组”(flexible array)成员:返回结构中包含padding,但不包括“可灵活数组”的占用空间,此时的功能如同 offsetof(flexarray, array)
。
#include <stdio.h>
struct flexarray {
char val;
int array[]; /* Flexible array member; must be last element of struct */
};
int main(int argc, char **argv)
{
printf("sizeof (struct flexarray) == %zu\n", sizeof (struct flexarray)); //通常结果为:sizeof (struct flexarray) == 4
return 0;
}
C99还支持动态长度数组,其长度在运行时确定:
#include <stddef.h>
size_t flexsize(int n)
{
char b[n + 3]; /* Variable length array */
return sizeof b; /* Execution time sizeof */
}
int main(void)
{
size_t size = flexsize(10); /* flexsize returns 13 */
return 0;
}
C++11支持获取类的成员的尺寸,不必实例化出对象:
#include <iostream>
struct foo {
int a;
int b;
};
int main ()
{
std::cout << sizeof foo::a << "\n" << sizeof (foo) << "\n";
}