为什么 Swift 的 malloc/MemoryLayout.size take/return 有符号整数?


public func malloc(_ __size: Int) -> UnsafeMutableRawPointer!
@frozen public enum MemoryLayout<T> {
public static func size(ofValue value: T) -> Int
...

当C中malloc/sizeof取/返回无符号的size_t时?斯威夫特不是在暗地里给libc打电话吗?

编辑:这是原因吗?https://qr.ae/pvFOQ6他们基本上是在试图摆脱C的遗产?

是的,它在底层调用libc函数。

Swift repo中的StdlibRationales.rst文档解释了为什么它将size_t导入为Int:

使用Int作为默认整数类型的收敛api允许用户编写更少的显式类型转换。

对于64位平台,将size_t导入为带符号的Int类型不会有问题。唯一需要考虑的是32位平台,并且只涉及对类似数组的数据结构进行操作,这些数据结构跨越了一半以上的地址空间。即使在2015年的今天,仍然有足够多的32位平台令人感兴趣,64位cpu的x32 abi也很重要。我们同意32位平台很重要,但是在32位平台上使用无符号size_t的情况相当少,对于需要这样做的代码,总是可以选择对UInt进行位转换或使用c。

相关内容

  • 没有找到相关文章

最新更新