2014-12-19 45 views
-2

請考慮這兩個變量聲明。這兩個聲明都有數據類型。這些數據類型的實際用法是什麼?變量數據類型的用途

int a; 
MyClass b; 
  1. 有各自宣佈的內存來保存數據類型的一部分嗎?
  2. 做這些數據類型爲人類使用?
  3. 做這些數據類型不需要超出編譯器(編譯程序後)?
  4. 任何有關此內容的好資源?
+0

1,2,3是; 4關閉主題。 – EJP 2014-12-19 09:19:40

+0

一個很好的書籍列表在這裏:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – rubenvb 2014-12-19 09:40:00

回答

1
  1. 它用於分配所需的內存。它也用於(強)類型檢查。
  2. 也(但這不是主要原因)。
  3. 兩者。編譯器使用它們,但之後可能會根據對象類型使用動態行爲。
+0

分配內存後,它在程序中保存內存變量類型? – 2014-12-19 09:23:36

+0

user2393256已經更詳細地回答了這些問題。編譯器只將這些類型轉換爲CPU可以理解的語言; CPU並不知道類型。 另請注意,在您的應用程序中,您最好不要打擾關於如何分配內存以及存儲每個變量的詳細信息,因爲操作系統可能會改變它(使用虛擬內存,分頁等)。 – 2014-12-19 09:30:50

1
  1. 編譯器將要堆疊此變量上分配內存。你不知道分配了多少內存,因爲這取決於編譯器和編譯源代碼的系統。除非使用指針,否則C++中的變量總是在堆棧中分配。在那種情況下,他們被分配在堆上。

  2. 總的來說是。你的CPU不理解數據類型,最後你的代碼被編譯成二進制格式(一組CPU指令)在CPU上運行。你也可以把你的程序寫成一套這些指令而不是C++。然後你會使用匯編器。但即使彙編器也是一種機器代碼的商品接口,因爲它必須被編譯爲鏈接。

  3. 根據你的代碼,編譯器可能會對代碼做一些優化(例如copy elision)。

  4. 我不確定你期待或試圖學習,但我想你可以找一些編譯器體系結構文獻。

+0

所以在編譯之後,沒有更多的數據類型了,對吧?這意味着數據類型的大小(例如:int)取決於編譯平臺而不是破壞平臺。我對嗎? – 2014-12-19 09:36:12

+0

不是直接。 CPU指令仍然會在某些類型的值之間產生差異。例如,並非所有的ARM平臺都可以處理浮點數(高效)。算術邏輯單元使用寄存器存儲值並使用它的指令集來處理它們。什麼樣的數據適合[註冊](https://en.wikipedia.org/wiki/Processor_register)由硬件定義。 – user2393256 2014-12-19 09:45:44