其中是在C++、C和java中定义的默认基元

Where are the Default primitives defined in C++, c and java?

本文关键字:定义 默认 java C++      更新时间:2023-10-16

在java中,默认情况下它包括java.lang.*[这有基元吗]它包括Boolean、Integer,。。。包装器,使编译器可以理解我们的定义时,我们说整数i。

原始数据类型如何?

它是怎么知道的?

它在哪里定义?

编译器如何知道要分配多少内存?

int x;
double d;

它怎么知道int是4[2字节],double是8字节?

sizeof相应地给出大小。它和编译器可用的元数据一样吗?

在C和C++中,这些基元就是:基元。它们是在编译器本身中定义的(好吧,在"可移植"编译器中,编译器有针对不同体系结构的编译选项,人们怀疑有多个文件定义了这些类型)。C标准(同样适用于C++)为这些类型定义了一些最小大小,但实际大小由编译器决定。

很可能,这些类型并没有那么特别,只是初始化期间的一些代码设置了这些类型,并定义了这些类型的大小、对齐要求和其他基本标准。当然,还有如何生成代码来访问和执行这些类型所需的内置运算符。

是的,sizeof()是通过在编译期间使用关于类型的数据来解析的。对于复合类型(structclassunion和数组),编译器还将考虑大小的对齐。

除了@Mats-Petersson的答案:

How does the compiler know how much memory to be alloted?  

要分配的内存取决于平台。每个基本类型的大小都有一个保证的最小范围。内存量至少是这个大小。

例如,无符号字符的范围为0到255,即8位。编译器必须至少分配8位;但是它可以分配12、16或32。

一般来说,unsigned int的大小是平台的本地字大小,只要处理器的字大小可以支持标准指定的最小范围

不能保证int是4个字节或者double是8个字节。一些浮点处理器支持80多位。

Where's it defined?

范围规范在C++语言标准中说明,编译器的定义存储在系统文件<limits><climits>中。