大佬教程收集整理的这篇文章主要介绍了使用mmap()而不是malloc(),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
为了澄清,我不能使用malloc()但可以使用mmap().我在Netbeans上的Windows上没有遇到任何问题,但是现在我正在编译并在Ubuntu上从命令行运行我每次尝试访问它时都会收到“Segmentation Fault”.
有没有理由说它可以在一个而不是另一个上工作,并且mmap()是以这种方式分配内存的有效方法吗?我担心的是我最初会为每个mmap()调用分配大块内存,现在我无法让它运行.
另外,我的mmap返回的错误是22 – 无效参数(我在编写问题时做了一些故障排除,因此错误检查不在上面的代码中).地址为0,自定义SIZEOF()函数在其他mmap参数中有效,我使用MAP_ANONymOUS,因此fd和offset参数必须分别为-1和0.
PROT_READ | PROT_WRITE部分有问题吗?
您只需要其中一个标志MAP_PRIVATE或MAP_SHARED – 但您没有给出其中任何一个.
一个完整的例子:
#include <sys/mman.h> #include <stdio.h> typedef struct { int a; int b; } myStruct; int main() { myStruct * entry = (myStruct *)mmap(0,sizeof(myStruct),MAP_PRIVATE | MAP_ANONymOUS,0); if (entry == MAP_@L_197_18@) { printf("Map @L_197_18@.\n"); } else { entry->a = 4; printf("success: entry=%p,entry->a = %d\n",entry,entry->a); } return 0; }
(上面没有MAP_PRIVATE当然是你作为MCVE提供的一个很好的例子.这使得其他人更容易帮助你,因为他们可以准确地看到你做了什么,并测试他们的建议解决方案.你应该总是提供MCVE).
以上是大佬教程为你收集整理的使用mmap()而不是malloc()全部内容,希望文章能够帮你解决使用mmap()而不是malloc()所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。