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,開發者就能獲得更多操作確定性。

热门文章
BETFAIR 网络攻击80万用户资料泄露
游戏风向
超级PAC筹资4800万美元:体育博彩势力加码
游戏风向
印度最高法院受理公益诉讼,要求全国禁封“伪装”成社交游戏的赌博平台
游戏风向
密西西比州众议院委员会推进提议增加赌场税的法案
游戏风向
英国确认各垂直行业的赌博税税率
游戏风向
菲律宾博彩技术赛道迎来新变局,B2B 供应模式加速渗透
东南亚资讯
GGC Awards 2026 璀璨科伦坡:致敬 iGaming 行业的领航者与创新力量
灰度头条
新泽西州7月博彩收入创6.06亿美元新高,颁布禁令
游戏风向
巴西颁布新法赋权央行封锁非法博彩账户及 Pix 交易
支付动态
巴西拟将博彩税率提高至24% 税收将用于社保和医疗领域
游戏风向
越南在线博彩业政策收紧 催生市场新机遇
东南亚资讯
PropellerAds 分享了新的 iGaming 案例研究:在 3 个月实现 97,674 次安装和 12,701 笔存款
广告营销
灰度在iGB L!VE 2026展位T70和你相约7月,一起点燃伦敦的热情!
灰度头条
准备好了将你的收益最大化吗?尝试ProPush.me Constructor!
广告营销
斯里兰卡博弈产业大转型,官方:剑指南亚拉斯维加斯
游戏风向
首页
游戏
合作
发现
我的