gpt4 book ai didi

c - 如何从 UnsafeMutableRawPointer 获取页对齐地址?

转载 作者:行者123 更新时间:2023-11-28 15:19:31 30 4
gpt4 key购买 nike

我可能会以错误的方式解决这个问题,因为我过去没有做过很多指针运算(甚至可能没有必要)。

但是,在 Swift 中给定一个指针(UnsafeMutableRawPointer 类型),我想获得最接近(向下舍入)的页面对齐地址。这是为了使用 msync 同步一些内存映射数据。

基本上,我正在尝试迁移一些如下所示的 Objective C(好吧,基本上是 C)代码:

int pageSize = getpagesize();
void *address = [some bytes];
size_t pageIndex = (size_t)address / pageSize;
void *pageAlignedAddress = (void *)(pageIndex * pageSize);

到目前为止,在 Swift 中我有类似的东西:

let pageSize: Int = Int(getpagesize())
let bytes: UnsafeMutableRawPointer = [some bytes]
let pageIndex: Int = Int(bytes) / pageSize
let pageAlignedAddress: UnsafeMutableRawPointer = UnsafeMutableRawPointer(pageIndex * pageSize)

显然,我的 Swift 代码的最后两行无法编译,因为我在混合类型并使用不存在的初始化器。但是我看不到如何将我现有的 UnsafeMutableRawPointer 转换为页面对齐,我也看不到该类型的任何方法可以帮助我。

也许这对于 Swift 类型来说甚至不是必需的,它们总是页面对齐的......

最佳答案

看来您只需要知道初始化器 IntUnsafeMutableRawPointer 有什么。

Int

init(bitPattern: UnsafeMutableRawPointer?)

UnsafeMutableRawPointer

init?(bitPattern: Int)

Int 有一个采用 UnsafeMutableRawPointer? 的初始化器,而 UnsafeMutableRawPointer 有一个采用 Int 的初始化器。为什么不用它们?

let pageIndex: Int = Int(bitPattern: bytes) / pageSize
let pageAlignedAddress: UnsafeMutableRawPointer? = UnsafeMutableRawPointer(bitPattern: pageIndex * pageSize)

关于c - 如何从 UnsafeMutableRawPointer 获取页对齐地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46266597/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com