請考慮這兩個變量聲明。這兩個聲明都有數據類型。這些數據類型的實際用法是什麼?變量數據類型的用途
int a;
MyClass b;
- 有各自宣佈的內存來保存數據類型的一部分嗎?
- 做這些數據類型爲人類使用?
- 做這些數據類型不需要超出編譯器(編譯程序後)?
- 任何有關此內容的好資源?
請考慮這兩個變量聲明。這兩個聲明都有數據類型。這些數據類型的實際用法是什麼?變量數據類型的用途
int a;
MyClass b;
分配內存後,它在程序中保存內存變量類型? – 2014-12-19 09:23:36
user2393256已經更詳細地回答了這些問題。編譯器只將這些類型轉換爲CPU可以理解的語言; CPU並不知道類型。 另請注意,在您的應用程序中,您最好不要打擾關於如何分配內存以及存儲每個變量的詳細信息,因爲操作系統可能會改變它(使用虛擬內存,分頁等)。 – 2014-12-19 09:30:50
編譯器將要堆疊此變量上分配內存。你不知道分配了多少內存,因爲這取決於編譯器和編譯源代碼的系統。除非使用指針,否則C++中的變量總是在堆棧中分配。在那種情況下,他們被分配在堆上。
總的來說是。你的CPU不理解數據類型,最後你的代碼被編譯成二進制格式(一組CPU指令)在CPU上運行。你也可以把你的程序寫成一套這些指令而不是C++。然後你會使用匯編器。但即使彙編器也是一種機器代碼的商品接口,因爲它必須被編譯爲鏈接。
根據你的代碼,編譯器可能會對代碼做一些優化(例如copy elision)。
我不確定你期待或試圖學習,但我想你可以找一些編譯器體系結構文獻。
所以在編譯之後,沒有更多的數據類型了,對吧?這意味着數據類型的大小(例如:int)取決於編譯平臺而不是破壞平臺。我對嗎? – 2014-12-19 09:36:12
不是直接。 CPU指令仍然會在某些類型的值之間產生差異。例如,並非所有的ARM平臺都可以處理浮點數(高效)。算術邏輯單元使用寄存器存儲值並使用它的指令集來處理它們。什麼樣的數據適合[註冊](https://en.wikipedia.org/wiki/Processor_register)由硬件定義。 – user2393256 2014-12-19 09:45:44
1,2,3是; 4關閉主題。 – EJP 2014-12-19 09:19:40
一個很好的書籍列表在這裏:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – rubenvb 2014-12-19 09:40:00