- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题需要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
未指定它将使用文件大小。
#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/
我正在创建一个基于文件的点云八叉树,以便在非常大的文件(无法存储在 ram 中)上管理过滤器。这个方法的瓶颈,到目前为止,是叶子的I/O(因为我经常要写,重写文件和读取文件......) 所以我想使用
我对内存映射非常陌生,并试图了解内存映射文件以在我的项目(基于 Linux)中使用它们。我的要求是写入然后从内存映射文件中读取。我写了一个示例程序,它只写并且运行良好,但我有一些非常基本的疑问,因为我
我在这里粘贴了一些代码,它使用 boost iostream 进行 mmap,然后写入映射文件: typedef unordered_map work; int main() {
或者更好的模板 ? 如果内存映射文件包含一个 32 位整数序列,如果 data()返回了 void* , 我们可以静态转换为 std::uint32_t直接。 为什么 boost 作者选择返回 cha
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题?通过 editing this post 添加详细信息并澄清问题. 1年前关闭。 Improve this
我是一名优秀的程序员,十分优秀!