c++读写文件-效率优化

使用内存映射mmap 技术来减少内存拷贝。

  1. 减少系统调用: 直接将文件映射到内存,避免了多次读写文件时的系统调用,减少了上下文切换的开销。

  2. 内存共享: 通过映射,多个进程可以共享同一块内存区域,从而减少内存使用和提高访问速度。

  3. 按需加载: 操作系统可以根据实际需要将文件的部分内容加载到内存中,而不是一次性读取整个文件,这样可以节省内存和时间。

  4. 数据局部性: 一旦数据被加载到内存,后续的访问可以直接从内存中读取,提高了访问速度。

#include <iostream>
#include <fcntl.h>    // open
#include <sys/mman.h> // mmap, munmap
#include <sys/stat.h> // fstat
#include <unistd.h>   // close

int main() {
    // 打开文件
    const char* filepath = "example.txt";
    int fd = open(filepath, O_RDONLY);
    if (fd == -1) {
        std::cerr << "Error opening file" << std::endl;
        return 1;
    }

    // 获取文件大小
    struct stat fileStat;
    if (fstat(fd, &fileStat) == -1) {
        std::cerr << "Error getting file size" << std::endl;
        close(fd);
        return 1;
    }

    // 使用 mmap 映射文件
    size_t fileSize = fileStat.st_size;
    char* mapped = (char*)mmap(nullptr, fileSize, PROT_READ, MAP_PRIVATE, fd, 0);
    if (mapped == MAP_FAILED) {
        std::cerr << "Error mapping file" << std::endl;
        close(fd);
        return 1;
    }

    // 访问文件内容
    std::cout << "File contents:" << std::endl;
    std::cout.write(mapped, fileSize);

    // 解除映射和关闭文件
    if (munmap(mapped, fileSize) == -1) {
        std::cerr << "Error unmapping file" << std::endl;
    }
    close(fd);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值