微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 我应该如何在内存中存储大量文本数据?

我正在研究一个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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐