Rust更新u128、i128資料型別記憶體對齊,確保與C語言一致
· 2024-04-03

Rust開發團隊修正u128、i128資料型別在x86架構上的對齊問題,確保與C語言完全相容,不過卻可能會增加記憶體占用

Rust開發團隊解決了長期以來與C語言在x86-32和x86-64架構上,處理128位元整數對齊(Alignment)上的不一致。採用LLVM 18的Rust現在處理i128、u128資料型別,會與所有版本的GCC,以及Clang 18以上版本相容。

Rust開發團隊解決了u128、i128資料類型,在記憶體中的布局問題,這個問題涉及資料型別在記憶體中的對齊方式。所謂的記憶體對齊,是指資料型別被允許放置的記憶體地址規範,對齊方式可以依據需求變化,像是一個8位元組大小的整數,可以儲存在任意記憶體地址,而64位元電腦系統可能會選擇採用8位元組的對齊方式。

在Rust與C語言中,針對u128、i128資料型別在x86-32和x86-64架構上的對齊方式,長期以來存在不一致。這種不一致來自於兩個實作的對齊要求不同,在C語言中,__int128(相當於Rust的u128、i128)的對齊要求遵循該平臺應用程式二進位介面(ABI)的規範,代表著在x86-64系統上,__int128的對齊可能被要求為16位元組,目的是最大程度提高存取這些資料型別的效率。

Rust在早期版本中,對於u128、i128的對齊不完全遵循C的ABI規範,導致在部分情況下,這些資料型別的對齊方式與C不一樣,使得外部函式介面(FFI)呼叫時可能出現難以預料的行為或是效能問題。

為了解決與C語言在處理u128、i128資料型別對齊不一致的問題,Rust進行了調整,現在使資料型別對齊方式與C保持一致,而由於資料類型在記憶體中的布局更加可預測,減少了潛在轉換或是對齊物的問題,因此直接提高了外部函式介面的相容性和效能。不過,也因為這些類型現在需要更大的對齊空間,可能導致程式碼的記憶體占用增加。

對大多數Rust開發者來說,這次更改並不會有太大的影響,但是如果開發者在程式碼中直接假設這些類型的對齊而沒有使用align_of,或是在外部函式介面中使用這些資料型別,卻忽略improper_ctypes*的Lint,則開發者可能會需要更新程式碼,避免發生潛在的問題。

從Rust 1.77開始,開發者在外部函式介面中使用128位元整數時會相對安全,而隨著1.78版本更新LLVM,開發者就能獲得更多操作確定性。

熱門文章
JILI 宣佈與全球板球傳奇 AB de Villiers(ABD)達成重磅戰略合作
體育遊戲
哈薩克計劃對線上賭場促銷活動進行處罰
合規與政策
越南博彩管控逐步放寬,惟本土需求仍顯乏力
東南亞資訊
印度最高法院受理公益訴訟,要求全國禁封「偽裝」成社交遊戲的賭博平台
合規與政策
橫跨全球6個城市,灰度8場派對邀你共看世界盃,重塑高質量社交新場景
灰度頭條
菲律賓博彩技術賽道迎來新變局,B2B 供應模式加速滲透
東南亞資訊
越南在線博彩業政策收緊 催生市場新機遇
東南亞資訊
英國確認各垂直行業的賭博稅稅率
合規與政策
巴西擬將博弈稅率提高至24% 稅收將用於社保與醫療領域
合規與政策
印第安納州在線賭場法案在眾議院委員會停滯不前
合規與政策
GGC Awards 2026 璀璨科倫坡:致敬 iGaming 行業的領航者與創新力量
灰度頭條
菲律賓網絡賭博和加密貨幣仍構成持續的洗錢風險
東南亞資訊
斯里蘭卡博弈產業大轉型,官方:劍指南亞拉斯維加斯
合規與政策
超級PAC籌資4800萬美元:體育博彩勢力加碼
合規與政策
新澤西州7月博彩收入創6.06億美元新高,頒布禁令
合規與政策
首頁
遊戲
合作
發現
我的