2013-07-01 37 views
-1

在java中,默认情况下,它包含java.lang。* [它是否具有原语]它包括布尔,Integer,...包装,以便编译器可以在我们说Integer i时理解我们的定义。在C++,c和java中定义的默认原语在哪里?

原始数据类型如何?

它是如何知道的?

它的定义在哪里?

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

int x; 
double d; 

它如何知道int是4 [2字节],double是8字节?

sizeof给出相应的大小。它是否像编译器可用的元数据?

+3

http:// stackoverflow。com/questions/4737311/in-java-do-primitive-types-and-arrays-have-a-containing- – vmkrish

+0

它与编译器相关 – mattn

+5

对于Java,基元是语言的一部分,在语言规范中定义。 –

回答

0

除了@Mats皮特森的回答是:

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>

2

在C和C++中,这些原语就是:primitives。它们是在编译器本身中定义的(好吧,在“便携式”编译器中,编译器具有用于不同体系结构的编译选项,人们怀疑有多个文件定义这些类型)。 C标准(同样适用于C++)为这些类型定义了一些最小尺寸,但实际尺寸取决于编译器。

很可能,这些类型并不是特别的,它只是在初始化过程中的一些代码设置类型并定义了这些类型的大小,对齐要求和其他基本条件。当然,在这些类型上,如何生成代码来访问和执行所需的内置运算符。

是的,sizeof()通过在编译期间使用关于类型的数据来解决。对于化合物类型(struct,class,union和数组),编译器还会考虑大小中的对齐。

相关问题