public func malloc(_ __size: Int) -> UnsafeMutableRawPointer!
@frozen public enum MemoryLayout<T> {
public static func size(ofValue value: T) -> Int
...
什么時候在 C malloc/ sizeoftake/returnsize_t中是無符號的?Swift 不是在后臺呼叫 libc 嗎?
編輯:這是原因嗎?https://qr.ae/pvFOQ6 他們基本上是想擺脫 C 的遺產?
uj5u.com熱心網友回復:
是的,它在后臺呼叫 libc 函式。
Swift repo 中的StdlibRationales.rst檔案解釋了為什么它匯入size_t為Int:
用作默認整數型別的聚合 API
Int允許用戶撰寫更少的顯式型別轉換。
size_t對于 64 位平臺,作為簽名型別匯入Int不會有問題。唯一關心的是 32 位平臺,并且只關心在跨越一半以上地址空間的類陣列資料結構上操作。即使在 2015 年的今天,仍有足夠多的 32 位平臺令人感興趣,而用于 64 位 CPU 的 x32 ABI 也很重要。我們同意 32 位平臺很重要,但size_t在 32 位平臺上無符號的用例非常少,而且對于仍然需要這樣做的代碼,總是可以選擇對 C 進行位轉換UInt或使用 C。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486947.html
