sizeof运算符背后的逻辑

时间:2013-07-25 12:07:55

标签: c operators sizeof

我们sizeof中有C运算符。它返回数据类型的大小,

printf("%d",sizeof(some datatype));

,结果为4(取决于操作系统)。

我想知道它是如何计算的。这个运营商背后的逻辑是什么? 如果我要求您为sizeof运算符编写代码。你的答案是什么?

注意:我想知道sizeof如何编写为代码,以便能够计算大小。

我可能无法正确地提出我的问题,我在这里再试一次。

Write one function which we can use instead of sizeof operator.

4 个答案:

答案 0 :(得分:5)

编译器知道所有类型的大小,它必须或者无法正确生成代码。此信息由sizeof运营商使用。

另请注意,sizeof不是在运行时调用的某个函数,它是在编译期间完全评估的运算符。

答案 1 :(得分:1)

在编译时,sizeof(int)被替换为特定于平台的常量。sizeof运算符完全在C编译器中实现。它不是一个函数调用,它不能在运行时运行。

编译器中sizeof的代码非常简单。它具有硬编码值,例如,在32位机器int上有4个字节,char有1个字节等等。所以,它只是一个简单的查找和替换字符串{{1与sizeof(int)

顺便说一下,你在一元表达式上不需要括号,所以只有4才能写int t[10]。但是,您需要它们作为类型名称表达式,例如:sizeof t。只是一个有趣的事情。

答案 2 :(得分:1)

引自wikipedia

  

在大多数情况下,sizeof是编译时运算符,这意味着在编译期间,sizeof表达式被替换为常量结果值

答案 3 :(得分:0)

在编译时sizeof(int)被适当的大小取代,取决于操作系统(16位,32位,64位)

您可以为字符串编写自己的函数大小

或MACRO

#define SIZEOF(x) ((char*)(&(x) + 1) - (char*)&(x))