gpt4 book ai didi

c++ - 使用 Boost::mapped_file 时,为什么文件的大小似乎上限为 65,356 字节?

转载 作者:行者123 更新时间:2023-12-03 07:21:40 24 4
gpt4 key购买 nike

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.

1年前关闭。




Improve this question




对于我的程序,我正在使用 boost::mapped_file 来内存映射我想要访问以用于模式检测算法的文件。为了测试映射文件的构造,以及我的算法的以下执行,我一直在通过指定我想要的文件大小、创建文件并用随机字符填充它来测试文件的映射,然后映射该文件。问题是我遇到了一个奇怪的错误,我不太确定发生了什么。
我得到的错误是,一旦我的文件达到 size=65,536 字节,当尝试使用 boost::mapped_file_source::size() 方法时,返回值为 0。我在此之后尝试使用的任何文件大小都只是65,536 的递增版本意味着文件大小=65,538 返回的大小为 2。
我很好奇这是否与映射文件的对齐有关,我看到它提到了 here .但是,当我调用 boost::mapped_file_source::alignment() 方法时,它返回了 4096,我不明白。对齐是什么意思,它是如何解决这个问题的?
另外,为什么 boost::mapped_file_source::size() 在 file_size>65,536 bytes 时返回 0 ?我知道 65,536 等于对齐值 (4096) * 16,但我不明白为什么。

最佳答案

您应该显示相关代码。 Docs

 explicit mapped_file_source( const std::string& path,
size_type length = max_length,
boost::intmax_t offset = 0 );
具体来说,如果 length未指定它将使用文件大小。
Boost IOStreams 没有您描述的限制,您可以轻松展示:
Live On Coliru
#include <boost/iostreams/device/mapped_file.hpp>
#include <iostream>
#include <sys/stat.h>
#include <fcntl.h>

static constexpr auto PATH = "path";

void test(std::size_t length) {
int fd =::creat(PATH, 0600);
if (::ftruncate(fd, length) || ::close(fd))
::perror("whoops");

boost::iostreams::mapped_file_source m(PATH);
std::cout
<< m.size() << " = "
<< std::hex << std::showbase << m.size() << "\n";
}

int main() {
test(0XFFFF);
test(0X1FFFF);
test(0X2FFFF);
}
打印
65535 = 0xffff
0x1ffff = 0x1ffff
0x2ffff = 0x2ffff

关于c++ - 使用 Boost::mapped_file 时,为什么文件的大小似乎上限为 65,356 字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64922116/

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