今天在公司討論專案重構的問題時,公司的 DBA 針對表中的欄位大概介紹了一下 float 和 double 的存盤方式,然后,我發現這個問題又回到了浮點數型別在記憶體中的存盤方式,即 IEEE 對浮點數存盤的標準,
我在之前的內容中寫到過,在公司另外一個專案當中,在寫一個 TCP 服務器時,對端的設備中發來的資料就存在浮點數,當時 TCP 服務器使用的是 Java 的 Netty 寫的,而對端的設備中的程式是用 C 語言寫的,而資料中存在使用 IEEE 編碼表示的浮點數,所以 Java 寫的 Netty 要對 C 的浮點數進行決議,而不能直接使用,
之前的內容:IEEE 二進制浮點數的表示
對于資料在記憶體中的存盤,可能使用 C、C++ 或 ASM 等語言開發,會有一個較為清晰的了解和認識,畢竟這些可以很直觀的觀察記憶體中資料的存盤方式,因為只要想了解資料在記憶體中的存盤方式,可以直接打開除錯器去觀察記憶體,
而其他語言可能比較困難,至少我不太清楚 Java 的資料在其記憶體中的存盤方式,而 PHP 的資料存盤方式查看起來也不是特別的方便,至少,對于 C、C++ 在 VS IDE 的除錯環境中,我可以直接查看記憶體,而 Java 的 Eclipse、MyEclipse 的除錯環境中,我并沒有注意到有查看變數在記憶體中存盤方式的相關視窗,至于 PHP 語言,以我短時間閱讀 PHP 底層原始碼的經驗來看,應該存盤方式也使用了 IEEE 的存盤方式相同,因為 PHP 的這種“變體型型別”無非就是結構體中有資料型別的 type 欄位,然后根據不同的 type 在進行存盤,
所以,無論是學習哪種語言,我覺得都有必要學習一下 C 語言,C 語言雖然古老,但是它在底層對記憶體的操作還是值得去學習的,畢竟誕生幾十年的 C 語言,依然雄霸語言排行榜的第 2 位,
在道家有一句話叫“1 生 2,2 生 3,3 生萬物”,在程式界也有一句話,叫“ 0 1 生匯編, 匯編生 C,C 生萬物”,雖然 C 語言不是從匯編語言而來,但是,這句話至少反應了 C 在程式界地位,網上有一張圖很好的反應了 C 和其他主流語言的關系,制作很貼切的一張圖片,用忍者神龜和它們的老師來表現的,圖片的地址:
https://graph.baidu.com/resource/111e0f1732f6c977e382601572363399.jpg
C 已老去,但是有很多的語言中有 C 的影子,C 語言完成了 Unix、Linux 以及 Windows 作業系統,當然包括 Mac 系統,包括很多語言其底層也是 C 語言實作的,
如果有興趣體驗一下 IEEE 在記憶體中的存盤方式,可以參考如下地址:
http://www.yzmedu.com/learn/2218
我的微信公眾號:“碼農UP2U”

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/113099.html
標籤:MySQL
上一篇:阿里 位元組 網易端JAVA后端面試經歷分享,已拿offer(求你讓我幫忙內推吧)
下一篇:索引
