在java中,默认情况下它包含java.lang。* [这有原语吗]它包括Boolean,Integer,... Wrappers,以便编译器在我们说Integer i时可以理解我们的定义。
原始数据类型如何?
怎么知道?
它定义在哪里?
编译器如何知道要分配多少内存?
int x;
double d;
如何知道int是4 [2字节],double是8字节?
sizeof相应地给出了尺寸。是否像编译器可用的元数据?
答案 0 :(得分:2)
在C和C ++中,这些原语只是:原语。它们在编译器本身中定义(好的,在“可移植”编译器中,编译器具有针对不同体系结构的编译选项,其中一个怀疑存在定义这些类型的多个文件)。 C标准(以及同样适用于C ++)定义了这些类型的一些最小大小,但实际大小取决于编译器。
最有可能的是,这些类型并不特别,只是初始化期间的某些代码会设置类型并定义这些类型的大小,对齐要求和其他基本条件。当然,如何在这些类型上生成访问和执行所需内置运算符的代码。
是的,sizeof()
通过在编译期间使用有关类型的数据来解决。对于复合类型(struct
,class
,union
和数组),编译器还会考虑大小的对齐方式。
答案 1 :(得分:0)
除了@Mats Petersson的回答:
How does the compiler know how much memory to be alloted?
要分配的内存取决于平台。每种基本类型的大小都有保证的最小范围。内存量至少是那个大小。
例如,unsigned char的范围是0到255,即8位。编译器必须至少分配8位;但它可以分配12,16或32.
通常,unsigned int
的大小是平台的本机字大小,只要处理器字大小可以支持标准指定的最小范围。
无法保证int
为4个字节或double
为8个字节。一些浮点处理器支持80位以上。
Where's it defined?
范围规范在C ++语言标准中规定,编译器的定义存储在系统文件<limits>
或<climits>
中。