在java中,默認情況下,它包含java.lang。* [它是否具有原語]它包括布爾,Integer,...包裝,以便編譯器可以在我們說Integer i時理解我們的定義。在C++,c和java中定義的默認原語在哪裏?
原始數據類型如何?
它是如何知道的?
它的定義在哪裏?
編譯器如何知道要分配多少內存?
int x;
double d;
它如何知道int是4 [2字節],double是8字節?
sizeof給出相應的大小。它是否像編譯器可用的元數據?
在java中,默認情況下,它包含java.lang。* [它是否具有原語]它包括布爾,Integer,...包裝,以便編譯器可以在我們說Integer i時理解我們的定義。在C++,c和java中定義的默認原語在哪裏?
原始數據類型如何?
它是如何知道的?
它的定義在哪裏?
編譯器如何知道要分配多少內存?
int x;
double d;
它如何知道int是4 [2字節],double是8字節?
sizeof給出相應的大小。它是否像編譯器可用的元數據?
除了@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>
。
在C和C++中,這些原語就是:primitives。它們是在編譯器本身中定義的(好吧,在「便攜式」編譯器中,編譯器具有用於不同體系結構的編譯選項,人們懷疑有多個文件定義這些類型)。 C標準(同樣適用於C++)爲這些類型定義了一些最小尺寸,但實際尺寸取決於編譯器。
很可能,這些類型並不是特別的,它只是在初始化過程中的一些代碼設置類型並定義了這些類型的大小,對齊要求和其他基本條件。當然,在這些類型上,如何生成代碼來訪問和執行所需的內置運算符。
是的,sizeof()
通過在編譯期間使用關於類型的數據來解決。對於化合物類型(struct
,class
,union
和數組),編譯器還會考慮大小中的對齊。
http:// stackoverflow。com/questions/4737311/in-java-do-primitive-types-and-arrays-have-a-containing- – vmkrish
它與編譯器相關 – mattn
對於Java,基元是語言的一部分,在語言規範中定義。 –