提问人:Vitaly 提问时间:6/6/2022 最后编辑:Vitaly 更新时间:6/6/2022 访问量:74
为什么 Swift 的 malloc/MemoryLayout.size 接受/返回有符号整数?
Why Swift's malloc/MemoryLayout.size take/return signed integers?
问:
public func malloc(_ __size: Int) -> UnsafeMutableRawPointer!
@frozen public enum MemoryLayout<T> {
public static func size(ofValue value: T) -> Int
...
当在 C / take/return 中哪个是无符号的?
斯威夫特不是在引擎盖下调用 libc 吗?malloc
sizeof
size_t
编辑:这是原因吗?https://qr.ae/pvFOQ6他们基本上是想摆脱 C 的遗产?
答:
2赞
rob mayoff
6/6/2022
#1
是的,它在后台调用 libc 函数。
Swift 存储库中的 StdlibRationales.rst
文档解释了为什么它导入为:size_t
Int
将聚合 API 用作默认整数类型,使用户能够编写更少的显式类型转换。
Int
对于 64 位平台,作为签名类型导入不会有问题。唯一关心的是 32 位平台,并且只关注在跨越一半以上地址空间的类似数组的数据结构上运行。即使在 2015 年的今天,仍然有足够多的 32 位平台很有趣,而 64 位 CPU 的 x32 ABI 也很重要。我们同意 32 位平台很重要,但在 32 位平台上 unsigned 的用例非常微不足道,对于仍然需要这样做的代码,总是可以选择对 C 进行位播或使用 C。
size_t
Int
size_t
UInt
评论