2013-04-04 63 views
0

由於所有關於C++ 11語言的可用性的聲明,我一直在閱讀C++ Primer。這本書可能是好的,但它仍然讓我想知道代碼真正做的每一頁。一個結果是我最終googlinglotsandlotsofstuff..才最終與沿位線的東西最終是「機器專用」或「實施規定」等C中機器「細節」的實際值

我知道這意味着什麼,以及便攜式代碼如何重要。

但是我想知道,對於「普通」64位x86個人電腦,這些細節的實際值是什麼?由於GCC,Visual Studio等實際上並沒有詢問在所有這些情況下該做什麼,而只是編譯了代碼(並且它工作正常!),似乎有一些用於定位桌面的默認設置。

是否有覆蓋這些細節的文檔(對於非編譯器編寫者可以理解的方式,就像我鏈接的頁面一樣)?

+1

如果你想學習C,你爲什麼要讀「C++ Primer」? – 2013-04-04 21:59:17

回答

1

您可以登錄併發出命令

定位limits.h中

,它會發現一些大多數Unix或Linux系統,包括列出編譯器使用值「限制」的文件。 Linux內核代碼中的許多限制文件都是特定於體系結構的,這是您的特別興趣

+0

是的,我已經做到了。然而,這隻會導致更多的問題,因爲它部分使用了編譯器內在函數(請參閱第3個鏈接),並沒有解釋對齊等內容。 – Dexter 2013-04-04 21:03:32

0

坦率地說,可移植性很難獲得100%。我已經進行了30年的編程,除了100%便攜式的簡單程序以外,從未見過任何東西。鑑於個人電腦無處不在,我不認爲你應該關心功能的可移植性。因此,您找到的所有參考都是「實現定義的」。

在一個完美的世界裏,程序是可移植的。在現實世界中,操作系統製造商增加了與其他操作系統製造商甚至自己競爭的功能(Win 95,98,2000,XP,7,Vista)(和Linux發行版有不同)。因此,便攜式 - 在我的經驗中 - 意味着您不願意做出的權衡:太慢,太笨重,太多開發時間,太多測試等等。如果您尋求便攜性,您需要問爲什麼是值得的。即使您決定這樣做,您也會發現自己會根據您的環境添加編譯時選項,並且可能會以特定的和不可移植的完整文件結束。

當我爲Atmel Mega16編寫代碼時,我不考慮是否要移植該代碼。在這種情況下,您無法享受無限的CPU週期和無限的內存來考慮採用便攜式解決方案 - 我們正試圖將所有汁液擠出一點微型。

同樣,通常情況下,您需要優化彙編程序中的例程以獲取更多功能的CPU週期。 (就像一個運行DFT的DSP--當你第一次運行它時,它在C中是可以的,但最終你需要將它減少到ASM,以便獲得一大堆CPU週期,以獲得老闆希望在明天早上添加的23個更多功能。可移植性被詛咒。)

所以,是的,很多是特定於實現。在個人電腦領域,你有更多的奢侈品,但如果你正在編寫與硬件接口的代碼,你通常會被迫創建不可移植的代碼。我可以繼續下去,但我有一個需要優化的循環...