這段代碼爲什麼會出現分段錯誤?mmap:map_anonymous它爲什麼給SIGSEGV?
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <string.h>
int main()
{
void *ptr;
ptr=mmap(NULL, 10, PROT_READ|PROT_WRITE, MAP_ANONYMOUS, -1, 0);
strcpy(ptr, "Hello");
}
或者更好,我想有:char *ptr=malloc(10);
然後通過這個參數的mmap。兩者都給出了SIGSEGV。
+1,依靠分段故障作爲診斷手段可能並不總能產生理想的結果。 – 2011-12-23 13:47:13
非常感謝,它解決了。現在我使用malloc的返回值作爲mmap的第一個參數,並且這也起作用。你認爲映射內存而不是隻有malloc可能會造成一些開銷嗎? – kingsmasher1 2011-12-23 13:52:50
@ kingsmasher1:是的,潛在的很多。最小映射'mmap'實現爲1頁(在很多系統上4k,但可以更大),所以它不適合小分配(除非您自己管理映射內的小塊)。介紹開銷(OS和CPU),不要認爲你會找到一種快速而廉價的方式來實現你的目標,這很難做到,幾乎不可能做到「完美」 - 甚至valgrind也不行捕獲所有無效的內存引用,並且它實際上調整了整個CPU_。 – Mat 2011-12-23 13:57:22