这段代码为什么会出现分段错误?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