C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 我应该如何在内存中存储大量文本数据?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究一个c解析器,并想知道专家如何管理大量的文本/字符串(> 100mb)来存储在内存中?
预计内容将以快节奏的方式随时访问.
bg:redhat / gcc / libc

一个char数组将超出边界导致分段错误
欢迎任何想法或经验分享/讨论……

解决方法

如果您想随机访问该数据,mmap是处理存储在文件中的大量数据的最佳方式.

@H_807_7@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);

大佬总结

以上是大佬教程为你收集整理的c – 我应该如何在内存中存储大量文本数据?全部内容,希望文章能够帮你解决c – 我应该如何在内存中存储大量文本数据?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。