2014-10-08 232 views
-13

我正在學習C++,我想知道變量是否是真實的東西。他們是否在電腦的某個地方與編譯器交談?變量是真實的東西嗎?

+4

段錯只是你的變量存在危機 – 2014-10-08 22:56:50

+0

任何形式的計算機上的一切確實是「真實的」並存儲在某個地方。如果你想要這些細節而不是編程,這更像是一個硬件問題,所以我不會問StackOverflow – 2014-10-08 22:56:56

+3

它們是*在計算機*中。 [就像文件](https://www.youtube.com/watch?v=TV3Oncvz_cU) – HostileFork 2014-10-08 22:57:18

回答

9

變量是C++抽象機中的概念,它可能在計算機中可能有或沒有具體的對應物。這個沒有被嚴密保護的祕密是C++抽象機器不容易(它們是抽象的!),所以我們使用一些非常聰明的工具,編譯器來模擬C++抽象機器的行爲物理的,具體的電腦。

編譯器將嘗試將C++抽象機器中的概念映射到計算機中存在的事物,但這些映射不必完全一致。編譯器經常會跳過將一些變量映射到任何東西,因爲它們可以使您的程序像在C++抽象機器中運行一樣運行,而無需映射它們。這只是編譯器用來保持程序在其中一臺抽象機器而不是計算機上運行的錯覺的許多技巧之一。

這是否意味着變量是「真實的」?這聽起來就像是一個來自哲學的老問題:are numbers real?

+2

如果B * -tree在數據庫中發生段錯誤,但是所有數據都在FourSquare中存儲了帳戶配置文件的信息,是否丟失了? – HostileFork 2014-10-08 23:32:10

1

是變量保存在內存中。

  • 堆棧 - 如果它們是自動函數局部變量。
  • 堆 - 如果他們有newmalloc(通常不止,你指向一個變量)
  • 分配在每個進程的數據區 - 如果他們是全局或靜態變量。
  • 在硬盤驅動器中 - 如果您的操作系統內存不足。
  • 在寄存器中 - 也許它們更靠近CPU,因爲它們經常被使用。
  • 緩存L1,L2 - 用於減少從主存儲器訪問數據的時間,how they work

下面是一個SR鎖存器,其存儲在物理存儲器中的1位。使用Latch circuits儲存狀態

enter image description here

的更多信息。

最終所有都歸結爲1s和0s存儲在某個地方。變量,對象和其他高級概念是對機器級別下降的抽象表示。請記住,您正在使用1和0的machine language來控制硬件,然後在不同層的基礎上構建硬件。

+2

你在迴避這個問題。現在我們必須知道:內存和緩存真實的東西? – HostileFork 2014-10-08 23:00:25

+0

如果您的操作系統將您的進程換出了,也可能在磁盤上 – 2014-10-08 23:01:44

+0

更不用說只是保存在寄存器中。 – chris 2014-10-08 23:02:35

0

您的計算機有大量的內存(RAM)。作爲第一個近似值,您可以想象,無論何時使用變量,編譯器都會使用一些內存來存儲該變量的值。這是第一個近似值;隨着您不斷學習和了解計算機的工作原理,您會發現這不是,確切地說是

4

編號變量是語言的一部分。該語言描述了一套抽象的,理想化的機器的說明。語言翻譯器(編譯器)需要生成在真實硬件上執行的「真實」機器指令。

在翻譯過程中產生的指令可能與語言源代碼有很多或很少有關;唯一的要求是結果程序的行爲與抽象機器相似,就語言規則描述的輸入程序的可觀察效果而言。