簡體   English   中英

如何從UnsafeMutableRawPointer獲取與頁面對齊的地址?

[英]How can I get a page-aligned address from an UnsafeMutableRawPointer?

我可能會走錯路,因為過去我沒有做太多指針運算(甚至可能沒有必要)。

但是,給定Swift中的指針(類型為UnsafeMutableRawPointer ),我想獲取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有什么初始化器UnsafeMutableRawPointer

Int

init(bitPattern: UnsafeMutableRawPointer?)

UnsafeMutableRawPointer

init?(bitPattern: Int)

Int有一個使用UnsafeMutableRawPointer?的初始化UnsafeMutableRawPointer? ,並且UnsafeMutableRawPointer有一個采用Int的初始化程序。 你為什么不使用它們?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM