例如,此代码片段的结果取决于哪台机器: 编译器机器还是机器可执行文件工作?
sizeof(short int)
sizeof是编译时操作符。
sizeof
这取决于执行程序的机器。但该值在编译时计算。因此编译器(当然)必须知道它为哪台机器编译。
Sizeof 在编译时计算,但是如果可执行文件被移动到编译时和运行时值不同的机器上,则可执行文件将无效。
从 C99开始,sizeof 在运行时计算当且仅当操作数是一个可变长数组,例如 int a [ b ] ,其中 b 在编译时不知道。在这种情况下,sizeof (a)在运行时计算,其结果是整个数组的大小(以字节为单位) ,即数组中所有元素的大小。若要获取数组中的元素数,请使用 sizeof(a) / sizeof(b)。来自 C99标准:
sizeof(a) / sizeof(b)
Sizeof 运算符生成其操作数的大小(以字节为单位) ,操作数可以是表达式或类型的括号名称。大小由操作数的类型决定。结果是一个整数。如果操作数的类型是可变长度数组类型,则计算该操作数; 否则,不计算该操作数,结果为 整数常数。
注意,所有这些都不同于在堆上分配一个数组所得到的结果,例如 int* a = new int[b]。在这种情况下,sizeof (a)只会给出指向 int 的指针的大小,即4或8字节,而不管数组中有多少元素。
int* a = new int[b]
Anon 试图解释这一点,但是他和其他人都没有说明您的编译器具有指示您为哪个处理器编译的标志。这就是在编译时如何知道 size of short 的。
然而,我认为任何桌面编译器都应该推出与桌面兼容的代码。我认为操作系统围绕这一点提供了某些抽象概念。尽管我听说 Windows 机器和 Macintosh 机器有不同的架构。