如何从UnsafeMutableRawPointer获取页面对齐的地址?

时间:2017-09-17 17:00:18

标签: c swift unsafe-pointers

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

但是,给定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类型来说,这甚至不是必需的,它们总是页面对齐...

1 个答案:

答案 0 :(得分:1)

似乎您只需知道初始值设定项<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <textarea name="message" rows=10 cols=80>Enter your text here</textarea>Int

Int

init(bitPattern: UnsafeMutableRawPointer?)

UnsafeMutableRawPointer

init?(bitPattern: Int)

UnsafeMutableRawPointer的初始值设定项为Int,而UnsafeMutableRawPointer?的初始化值为UnsafeMutableRawPointer。为什么不使用它们?

Int