Virtual-Memory
確保虛擬地址位於頁面的開頭
為什麼 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)
……)