研:内存映射方式处理大数据(20G) mmap+memcpy

    xiaoxiao2024-11-16  70

    目的,快速读写20G数据,,

    方法:mmap+memcpy

    状态:暂时放弃治疗

    已搞定: 

    bug: mmap+memcpy, char 转int 又出问题了

    研:mmap + memcpy 与传统 ofream读写对比

    研:mmap 总结

    乱到我都不想看,,,毕竟草稿本。

     

    各位大佬, 我想用mmap+memcpy将A文件(超过6gb,都是字符) 每个字符变成一个int数据 在写进B文件,但老是core 掉,我的做法如下: 1.mmap好A,关闭文件 2.mmap好B,长度4096, 3.循环读A的1024 个字符,转int,放进一个int 数组, 4.mmcpy 这个数组就B 5.改变offset,再映射,继续2-5的循环 请各位大佬指导下呗,跪谢

     

     

     还有个问题啊,就是我A是6gb,那么我B直接指定大小4*6gb是否刚好?

     

    刚开始应该用truncate()把文件B的长度设置为文件A的长度。应该是你没扩大文件B的长度,mmap()的参数offset超过文件B的长度,mmap()失败。

     

    不要想当然,以为失败返回NULL。

     

    On success, mmap() returns a pointer to the mapped area. On error, the value MAP_FAILED (that is, (void *) -1) is returned, and errno is set to indicate the cause of the error.

     

    如果char 到char很简单,char (A)搞到int(B)的,我通过char每次增加1024字节,来映射B大小,但是达不到效果,我不知道哪里错了

     

    我都asert了的

     

    我每次映射长度都最大是4096

     

    mmap()的参数offset超过文件长度,会导致mmap()失败。

     

    5.改变offset,再映射,继续2-5的循环 //是不是没有预先增加文件B的长度,导致mmap()失败?

     

     

     

    实际上现在已经不core 了,只是本来感觉应该是6gb A 文件操作后B应该会变成至少6*4=24GB,可我得到的结果B居然是A的一半@沙漠之狐

     

    mmap()的好处:进程把文件映射到进程的虚拟地址空间,可以像访问内存一样访问文件,不需要调用系统调用read()和write()访问文件,从而避免用户模式和内核模式之间的切换,提高读写文件的速度。

     

    1.mmap好A,关闭文件 2.mmap好B,长度4096, 5.改变offset,再映射 把这部分代码发出来看看

     

     

    醉了,我想着最后一起一把unmap

     

    哦,先unmap掉前面的

     

     

    页表都被冲爆了

     

    一直mmap

     

    请教一下这是什么原因?

     

    程序怎么能这么写

     

     大佬,我用大文件测试,只能到66501页

     

     

     

    遇到的问题:

    bug:memcpy core dump bus error

     

     

     

     

     

     

     

     

     

    每天进步一点点-->函数fseek() 用法

    阅读数 7万+

     

    c++对txt文件的读取与写入 16w+

    https://blog.csdn.net/lvbian/article/details/16341973 在linux中使用内存映射(mmap)操作文件 1w+

     

    https://blog.csdn.net/nocodelife/article/details/8647499  mmap实现大文件复制 2k

     

    mmap实现大文件快速拷贝 

     

    缺页异常详解 - cosmoslhf的专栏

     

     

    C函数之memcpy()函数用法

    阅读数 25万+

     

     

    memcpy引发的C常见指针问题

    阅读数 1441

     

    memcpy的用法总结

    阅读数 10万+

     

     

     

     

     

    最新回复(0)