sizeof 的结果取决于什么

Posted 车子 chezi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sizeof 的结果取决于什么相关的知识,希望对你有一定的参考价值。

本文讨论的是 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 的大小是否取决于编译器和/或处理器? - 堆栈溢出

以上是关于sizeof 的结果取决于什么的主要内容,如果未能解决你的问题,请参考以下文章

sizeof 的结果取决于什么

32、64位系统生成的MD5编码一样吗

数组大小取决于 sizeof() 结构字段

sizeof 是在编译时还是运行时评估?

sizeof(类)

关于C++中strlen(str)和sizeof(str)