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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值