c – 我应该如何在内存中存储大量文本数据?
发布时间:2020-12-16 10:45:15 所属栏目:百科 来源:网络整理
导读:我正在研究一个c解析器,并想知道专家如何管理大量的文本/字符串( 100mb)来存储在内存中? 预计内容将以快节奏的方式随时访问. bg:redhat / gcc / libc 一个char数组将超出边界导致分段错误… 欢迎任何想法或经验分享/讨论…… 解决方法 如果您想随机访问该
我正在研究一个c解析器,并想知道专家如何管理大量的文本/字符串(> 100mb)来存储在内存中?
预计内容将以快节奏的方式随时访问. bg:redhat / gcc / libc 一个char数组将超出边界导致分段错误… 解决方法
如果您想随机访问该数据,
mmap 是处理存储在文件中的大量数据的最佳方式.
mmap告诉虚拟内存系统映射地址空间的连续部分以包含文件中找到的数据.虚拟内存系统将分配一系列地址空间,由该文件支持.当您访问该地址空间中的任何位置时,它将分配一页物理内存,从磁盘读取该文件的该部分,并将虚拟地址空间的该部分指向它用于读取文件的物理内存.当需要在物理内存中腾出更多空间时,它会写出对磁盘的任何更改(如果适用),并删除该部分虚拟地址空间的映射. 你会像这样使用它: #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> /* the header where mmap is defined */ #include <fcntl.h> int file; char *contents; struct stat statbuf; off_t len; file = open("path/to/file",O_RDONLY); if (file < 0) exit(1); /* or otherwise handle the error */ if (fstat(file,&statbuf) < 0) exit(1); len = statbuf.st_size; contents = mmap(0,len,PROT_READ,MAP_SHARED,file,0); if (contents == MAP_FAILED) exit(1); // Now you can use contents as a pointer to the contents of the file // When you're done,unmap and close the file. munmap(contents,len); close(file); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- oop – 如何使抽象依赖属性起作用
- WebGIS--ArcGIS for Flex系列开发一:flash builder
- React结合webpack配置
- ios – Xcode单元测试 – 仅在设备构建时链接错误
- c# – 在Azure AD Graph Helper中获取成员组
- ruby-on-rails – Ruby – 如何为require()定义params?
- 在Quick Cocos2d-x中给CocosStudio中导出的UI(Widget)控件增
- database – 查询在触发后没有结果数据的目标
- c# – 用于.NET的SVN库?
- React-Native 原生跳转不同的RN界面的实现思路