Virtual-Memory

確保虛擬地址位於頁面的開頭

  • February 20, 2018

為什麼 IF 條件會檢查是否在 str頁面的開頭找到了指向的虛擬地址?

int main () {
char *str ;
str = (char*) malloc (sizeof(char)*4);
if ( ((int)str) & 0x00000FFF) != 0) return 0; // ensure the VA is ..
// at the start of a page
strcpy ( str ,"1234567890") ;
printf ("str=%s", str ) ;
return 0;
}

要獲得一些頁面對齊的指針(指向一些新分配的虛擬地址空間的新段),請使用mmap(2)(或posix_memalign(3) ….)

要查找頁面的大小(通常但不總是 4Kbytes),請使用getpagesize(2)或最好使用sysconf(3)_SC_PAGE_SIZE. 因此,如果指針不適合int(這很可能,更喜歡intptr_t)或者頁面大小不是 4K,那麼您的程式碼就是錯誤的。

另請參見proc(5)cat /proc/1234/maps ,例如使用和/或使用pmap(1)命令查詢 pid 1234 程序的虛擬地址空間。

順便說一句malloc(3)通常不返回頁面對齊的指針(所以你str經常不能滿足測試( ((int)str) & 0x00000FFF) != 0)……)

引用自:https://unix.stackexchange.com/questions/425229