2010-10-28 59 views
5

在C++中使用const時,是什麼讓你無法在機器的低層隱式傳遞一個非const的值?機器如何確定這是const什麼使const在機器的較低級別?

(除了一個事實,即const意味着這意味着什麼...)

是它可能存儲在內存.rdata部分還是有時設置,使得它常量位或這是如何工作的?

任何人都可以澄清?

+0

大多數情況下,什麼都沒有。 – 2010-10-28 11:01:13

回答

12

const主要是一個編譯時的事情;它並不意味着它們可能在運行時存儲在何處,或者它們是否可能在運行時受到保護。

在實踐中,編譯器可以選擇把常數在可執行文件,它可以由存儲器管理單元寫保護的程序部分(如果存在)。或者,編譯器可以將常量直接摺疊到代碼中,以使它們甚至不存在作爲可尋址位置。

或者,它可能不會做任何這些事情。

8

const -ness幾乎總是由編譯器,僅此而已,無所不及執行。根本沒有機器保護。

編輯:@Oli查爾斯沃斯的答案比我的好。

+0

值得一提的是,智能編譯器在優化階段也可以使用這些信息。 – 2010-10-28 11:07:20

1

在C++中,const,很少有什麼做硬件。這主要是告訴編譯器某種訪問會導致編譯器錯誤的一種方法。

唯一的例外是基本或POD類型的靜態常量變量,它們通常鏈接到可執行映像中的只讀部分,如果拋棄常量並嘗試去執行,會觸發某種頁面錯誤修改其中之一。

3

「const」並不一定意味着存儲是隻讀的。它是一個聲明,C++程序不會改變它(因此編譯器應該拒絕任何嘗試)。這並不意味着價值不會改變。

這是相當合理的一個變量是「const volatile的」(該計劃不會改變它,但它可能在任何時候改變)。例如,只讀硬件端口可能就是這樣一個野獸。

所以在「較低級別的機器」,沒有什麼需要做的事情。內存是什麼,應用程序員需要正確聲明內容。

相關問題