簡體   English   中英

C ++體系結構:它與機器體系結構有何相似之處

[英]C++ architecture : how is it similar to machine architecture

因此,到目前為止,我所編寫的全部都是C ++,並且我經常看到人們提到C ++之所以快是因為它與機器代碼非常相似。 我想知道機器/ C ++代碼架構到底是什么,為什么相似使得它更快,以及它與C#等其他架構的比較。

我了解RAII,堆,堆棧和語法,但有關此事。 我什至對計算機不是由CPU,RAM和硬盤驅動器組成的東西都不了解。 我計划很快就開始學習WP7應用程序開發的C#,因此,我認為對幕后工作有更深入的了解將有助於我識別這些語言之間的差異/相似之處。

有關該主題的文章的圖表或指針將非常棒!

使C ++成為C ++的東西實際上與任何機器體系結構都不相似。 是C子集相似。 變量賦值,函數調用,循環,數組遍歷和比較都傾向於映射到一小組快速的核心指令。 對基元或數組元素的賦值通常是現代處理器上的一條指令:例如,一條將值從內存移至寄存器的指令,反之亦然(例如,反之亦然。)長時間使用C語言進行編程的人們可以從字面上看到他們的編譯器將生成的機器代碼。 關鍵是“所見即所得”-語言指令直接或多或少地一對一翻譯為機器代碼。

另一方面,諸如C#(或Java,Ruby,Python,Perl,Haskell,Scheme等)等“高級”語言具有或多或少的底層運行時支持系統。 對於某些語言,這意味着分配可能需要先在表中查找內容; 對於其他人,這可能意味着分配有時是簡單的副本,或者有時是復雜的數據操作,具體取決於它是哪種數據。 很難預測您的語句將如何轉換為機器代碼。

C ++處於有趣的中間地帶:某些賦值就像C賦值一樣; 其他實際上是對operator=()重載調用,並且您永遠不確定要獲得什么(當然,如果不進行深入研究)。C ++確實有一個運行時系統。 它比Ruby,Haskell或Scheme的重量輕得多。

這並不是要以任何方式“相似”。 它與硬件接近。 C和C ++都不會向您隱藏任何內存管理的細節。 因為您必須考慮諸如對齊,連續訪問和堆棧之類的低級內容,所以您可以編寫效率更高的代碼。 高級語言對您隱藏了這些東西,這使您獲得了更好的編程體驗,但是通常情況下,代碼的優化程度並沒有達到最佳水平。

編程語言的發展表明,編程越方便,則需要為此付出更多的性能折衷。 對於大多數編程初學者而言,Java絕對比c或c ++更友好(內存管理,頭文件,容器等)。 C或C ++比Java快,因為它們被編譯成機器代碼,可以直接加載並運行。但是對於Java,您可能知道JRE,它是Java代碼的運行時框架,因為Java代碼被編譯為一些只有Java虛擬機才能理解的代碼(由c用一點匯編編寫)。C#的.Net框架就像Java的JRE。 在某些面向性能的業務中,這種性能差異可能起着很大的作用,但是對於大多數應用程序來說,這幾乎是不可見的。 希望能解釋!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM