在C ++,c和java中定义的Default原语在哪里?

时间:2013-07-01 23:59:53

标签: java c++ c

在java中,默认情况下它包含java.lang。* [这有原语吗]它包括Boolean,Integer,... Wrappers,以便编译器在我们说Integer i时可以理解我们的定义。

原始数据类型如何?

怎么知道?

它定义在哪里?

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

int x;
double d;

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

sizeof相应地给出了尺寸。是否像编译器可用的元数据?

2 个答案:

答案 0 :(得分:2)

在C和C ++中,这些原语只是:原语。它们在编译器本身中定义(好的,在“可移植”编译器中,编译器具有针对不同体系结构的编译选项,其中一个怀疑存在定义这些类型的多个文件)。 C标准(以及同样适用于C ++)定义了这些类型的一些最小大小,但实际大小取决于编译器。

最有可能的是,这些类型并不特别,只是初始化期间的某些代码会设置类型并定义这些类型的大小,对齐要求和其他基本条件。当然,如何在这些类型上生成访问和执行所需内置运算符的代码。

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

答案 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>中。