C語言中的對映是什麼東西,為什麼對映函式依賴於具體的實現?

時間 2021-06-01 05:57:17

1樓:

語言的抽象度,是跟具體architecture無關的。

現代PC上的flat memory model, 是可以把指標「直接對映」到乙個足夠大的整形了,但從歷史上看,是這不是100%可以確定的,以前不是如此,以後也很難100%保證。

以80x86在實模式的segmented memory model為例,段位址16位,段內偏移為16位,組合成20位,成為真正的位址,也就是所謂的段定址模式。乙個指標通常包含了乙個segment和乙個offset,兩個不一樣的segment和offset,實際位址可能是一樣的。這種位址如果要作為int操作(至少可能要比較大小吧)的話,要轉換成實體地址才能比較。

這種legacy模式現代OS已經不用了,但在第乙個C語言標準出來的時候,這種定址模式當時正大行其道。考慮到相容性,所有的x86系CPU,現在仍然支援,你甚至可以安裝乙個純DOS體驗一下,什麼64K常規記憶體之類的。。。

上面提到了兩種「對映」。這些可以說是歷史原因造成的。但從設計角度,如何把乙個邏輯位址(指標)對映到可以用來比較的int(通常是實體地址), 這是屬於architecture/CPU廠家的spec,所以只能implement dependent,否則把語言的實現耦合到硬體廠商那裡,顯然不是良好的設計。

從C/C++語言的角度來說,乙個指標可以儲存為足夠大的int,並且可以轉回來,這就夠了,不需要知道它究竟是怎麼轉換的,也盡量不要拿來來做位運算(這是理論的理想情況,然而實際工程中用的卻是蠻多的,因為「基本」可以保證不出問題)。

C語言中 nnn是什麼意思

Tanky Woo 000 nul 001 soh 002 stx 003 etx 004 eot 005 enq 006 ack 007 bel 010 bs 011 ht 012 nl 013 vt 014 np 015 cr 016 so 017 si 020 dle 021 dc1 022 ...

血源的夢境到底是什麼東西,為什麼怪會重新整理,但是NPC又都記得我,按道理講NPC不是也應該忘了我嗎?

再來 遊戲中發生的一切既可以是夢境也可以是現實 宮崎英高 亞楠城包括等一系列地圖,本身都是存在的。怪物的重新整理你可以理解為遊戲性,也就是說地圖中本來就有數不清的怪物。夢境本身的含義並不是做夢,你可以理解為是乙個時空。並且古神可以創造時空。主角能反覆重生是源自月神的力量,讓你的每次死亡都是夢境,而其...

請問c語言中的 的返回值是什麼?

暮無井見鈴 一段時間內 都是。至少在 C99 C17 中,true 就是 int 型別的 1 不過在 C23 1 中改掉了。true 變成了 Bool 1u 型別變成了 Bool 而在預處理環境中表現為無符號整數。 邱昊宇 是 int 型的 0 或者 1 The equal to and not e...