gpt4 book ai didi

c++ - 关于大文件文本编辑器中的内存映射文件和用法

转载 作者:行者123 更新时间:2023-11-30 04:30:48 34 4
gpt4 key购买 nike

我目前正在开发一个理想情况下应该能够处理非常大的文件(理论上为 16 eb)的文本编辑器。我打算在文件管理部分使用内存映射文件。我在 Windows via C/C++ 一书中阅读了一些有趣的示例。我的问题是:

  • 我需要映射的文件偏移必须在 64k(或任何分配粒度大小)边界上吗?
  • 我的第二个问题是,如果是(第一个问题),那么当我遇到需要文件内容的情况时,映射 2 个 64k View 以保持连续的文本流是否可行从 64k 边界的两侧?例如,可以说用户滚动到文件中的一个点,我在文件的 (64k - 1) 中有数据表示,这个点位于我的文本编辑器屏幕的中间,这样我需要显示数据比方说,范围从 (64k - x) 到 (64k + x)。所以我可以制作两个映射,0 - 64k 和 64k - 64k(我可以形成一个较小的映射,但无论如何我都需要稍后将映射大小调整为 64k)。

我不太确定如何构建问题,所以如果您不明白我的意思,我会根据收到的回复不断更新问题。

最佳答案

根据 MapViewOfFile 的文档, dwFileOffsetLow 是:

A low-order DWORD of the file offset where the view is to begin. The combination of the high and low offsets must specify an offset within the file mapping. They must also match the memory allocation granularity of the system. That is, the offset must be a multiple of the allocation granularity. To obtain the memory allocation granularity of the system, use the GetSystemInfo function, which fills in the members of a SYSTEM_INFO structure.

所以你的第一个问题的答案是肯定的。

第二个问题的答案也是肯定的。您可以创建同一文件的多个 View 。

文章Managing Memory Mapped Files可能对你有用。

顺便说一句,如果您的文本编辑器达到可以测试的程度,我会很想看看它。长期以来,我一直对找到能够优雅地处理非常大的文件的编辑器或文本文件查看器感到绝望。参见 Large Text File ViewersDesigning a better text file viewer一些想法。

关于c++ - 关于大文件文本编辑器中的内存映射文件和用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8469158/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com