之前有讀者問了這麼一個問題:大小端與編譯器和操作系統有關嗎?其實大小端主要由CPU決定,與編譯器、操作系統這些沒有直接關係。因為我以前學習的時候,有很長一段時間也是存在這樣的疑問。我覺得應該還有很多人都沒搞明白,所以,今天來分享一下相關內容。大小端也可以理解為字節順序,或者端序、尾序,也就是你們看到的大端序(Big-Endian)、小端序(Little-Endian)。可能部分初學者被一些外界信息給誤導,從而有這樣的疑惑。●操作系統是大端還是小端存儲?
● Keil C51是大端模式,認為與編譯器有關。
你了解大小端之後,你會發現,大小端主要有用於存儲的順序,與存儲器(硬件)關係比較大,編譯器和操作系統僅僅是配合CPU編譯好相應的代碼,而不是決定大小端的因素。我們在Cortex-M3手冊中有這麼一些描述:在Cortex-M3中, 存儲器系統支持 both 小端配置和大端配置。
Cortex-M3 支持 both 小端模式和大端模式。但是,單片機其它部分的設計,包括總線的連接,內存控制器以及外設的性質等, 一定要先在單片機的數據手冊上查清楚可以使用的端。在絕大多數情況下,基於 CM3 的單片機都使用小端模式。為了避免不必要的麻煩,基本清一色地使用小端模式。歸根結底,ARM的大小端模式還是與CPU有關,而與編譯器和操作系統沒有直接關係。