1
我創建使用mmap匿名映射,12個字節(小我知道)我如何知道我的mmaped分配的範圍?
p = mmap(NULL,
12,
PROT_READ| PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE,
-1,
0);
然後我想驗證我是否可以寫超出了12個字節
p=p+13;
strcpy(p,str);
printf("String at p is %s\n", ((char *)p));
果然我可以讀寫這個地區。我嘗試通過將指針遞增20,000來跨越~5頁。我的系統上的頁面大小是4096.我使用sysconf(_SC_PAGESIZE)發現了這個問題。我仍然可以讀寫指針
怎麼回事?我做錯了什麼,或者我還沒有達到一些glibc限制嗎?
編輯:爲了驗證,我想我的代碼失敗,超越穿越一些限制,我無法實現的,其中該限制是
不應該大增量失敗,在這種情況下?具體而言,我試圖瞭解何時我可以在超出某些界限的情況下閱讀或寫作。在我的情況下,即使5頁也沒有達到界限,當我要求的是12個字節! – wrecktangle
假設你的堆使用地址10,000到50,000,並且mmap在地址6,000處分配一個塊。當你添加20,000到mmap地址時,那是26,000,它位於堆的中間。你不能依賴它永遠失敗,沒有理由爲什麼系統不能爲了不同的目的分配相鄰的地址頁面,而你只是從一個溢出到另一個。 – Barmar
有趣。因此,我認爲自己能夠行使良好的行爲,還是有時候glibc會抱怨? – wrecktangle