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

热门文章
亚洲游戏市场观察:15大市场热门游戏与用户趋势
线上游戏
2027 Global Game Connect(GGC)斯里兰卡招商全面开启!业务人脉尽在掌握!
灰度头条
巴西颁布新法赋权央行封锁非法博彩账户及 Pix 交易
支付动态
英国确认各垂直行业的赌博税税率
游戏风向
亚洲顶尖游戏供应商多寶游戏 DB GAMING,开创亚洲市场的唯一首选
广告营销
巴西拟将博彩税率提高至24% 税收将用于社保和医疗领域
游戏风向
Zenith携手HUIDU,冠名赞助2026年世界杯嘉年华官方巡回活动
线上游戏
JILI 宣布与全球板球传奇 AB de Villiers(ABD)达成重磅战略合作
体育游戏
菲律宾博彩技术赛道迎来新变局,B2B 供应模式加速渗透
东南亚资讯
准备好了将你的收益最大化吗?尝试ProPush.me Constructor!
广告营销
超级PAC筹资4800万美元:体育博彩势力加码
游戏风向
PropellerAds 分享了新的 iGaming 案例研究:在 3 个月实现 97,674 次安装和 12,701 笔存款
广告营销
密西西比州众议院委员会推进提议增加赌场税的法案
游戏风向
哈萨克斯坦计划对在线赌场促销活动进行处罚
游戏风向
斯里兰卡博弈产业大转型,官方:剑指南亚拉斯维加斯
游戏风向
首页
游戏
合作
发现
我的