本文讨论的是 C 语言中的一个运算符:sizeof
注意,是运算符,不是函数。
sizeof 的结果是在编译时就可以确定的,于是有人认为,sizeof 的结果取决于编译器。这样说也对,但是我认为,C 和 C++ 旨在成为高效的语言。为了实现最大效率,C 或 C++ 实现必须考虑源自底层硬件的某些因素。出于这个原因,确保每种基本类型都基于硬件直接支持的某种表示是很有意义的。因此,sizeof 的结果取决于硬件。
可以这么说,sizeof 的结果取决于处理器(更具体地说,ISA,指令集架构,例如 x86 和 x86-64)和包括编程模型在内的编译器。
如果你不确定在你的机器上各种类型占多少个字节,最好写个代码测试一下。
#include <stdio.h>
#define TEST_SIZEOF_TYPE(x) \
do{\
printf(#x ": %lu\n",sizeof(x));\
}while(0)
int main(void)
{
TEST_SIZEOF_TYPE(int);
TEST_SIZEOF_TYPE(char);
TEST_SIZEOF_TYPE(short);
TEST_SIZEOF_TYPE(long);
TEST_SIZEOF_TYPE(long long);
TEST_SIZEOF_TYPE(float);
TEST_SIZEOF_TYPE(double);
TEST_SIZEOF_TYPE(long double);
TEST_SIZEOF_TYPE(char*);
}
我的运行结果是:
int: 4
char: 1
short: 2
long: 8
long long: 8
float: 4
double: 8
long double: 16
char*: 8
参考资料:
c++ - int 的大小是否取决于编译器和/或处理器? - 堆栈溢出
|