2017-02-15 68 views
3

mmap()確保返回值與系統上的最大對齊值對齊嗎?即由POSIX標準保證mmap必須返回爲alignof(std::max_align_t)的倍數的指針值?mmap是否返回對齊的指針值

我無法找到任何的Ubuntu Linux操作系統的mmap(2)手冊頁或Mac OSX上的mmap(2)手冊頁

+0

我不知道它是否有保證,但由於它具有硬件功能支持,如果沒有,我會非常驚訝。 –

+0

[此鏈接](http://stackoverflow.com/questions/31411730/mmap-enforce-64k-alignment)可能會有所幫助。查詢:相反,由mmap返回的地址只能保證頁面對齊。 – felix

+0

@felix'munmap()'的手冊頁說'addr參數不是頁面對齊的(即頁面大小的倍數)「,這意味着我不能釋放未在頁面邊界上對齊的內存,並且由於頁邊界大於最大對齊,因此在指針未對齊到最大對齊的情況下,我將無法調用munmap() – Curious

回答

3

是它這個信息。

http://man7.org/linux/man-pages/man2/mmap.2.html

在大多數 「流行」 NULL映射

如果addr是NULL的情況下,那麼內核選擇在其處 創建映射的地址;這是創建新映射的最便捷的方法。如果addr不是NULL,那麼內核把它作爲提示 關於放置映射的位置;在Linux上的,映射將在附近頁面邊界處創建的 。作爲調用結果返回的新映射的地址是 。

即使您指定MAP_FIXED比

不要解釋地址作爲一個提示:在正是 地址位置的映射。 addr必須是頁面大小的倍數。如果由addr和len指定的內存區域與任何現有映射的頁面重疊,則現有映射的重疊部分將丟棄 。如果指定的地址不能使用,mmap()將會失敗 。由於要求映射的固定地址小於 ,所以不鼓勵使用此選項。

以事實最小的頁面是4096B(用於x86,但對於其他平臺上是1024B的多個反正)和性病:: max_align_t是最有可能是在16B 64位系統將神韻:。