gpt4 book ai didi

c - 使用 mmap 将文件投影到内存中

转载 作者:太空宇宙 更新时间:2023-11-04 06:44:54 25 4
gpt4 key购买 nike

我正在尝试将文件投影到内存中以对其进行操作。该文件包含结构,因此我尝试使用指向一个结构开头的指针,然后读取它并修改一些变量。问题是执行时间很长,我想使用 mmap 的时间会更少。这是代码,有什么建议吗?

#include <unistd.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>

int revisanotas(int fd)
{
int nbytes=1;
int nbytese=0;
int i=0;
int n=0;
struct stat datos;
fstat(fd, &datos);
evaluacion buf;
evaluacion* buffer=mmap(0,datos.st_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
int actual = read(fd,buffer,datos.st_size);
{
i++;
if (buffer[i].notamedia >= 4.5 && buffer[i].notamedia < 5)
{
n=n+1;
printf("Notamedia = %f\n",buffer[i].notamedia);

buffer[i].notamedia=5;
}

}while (i<(datos.st_size/(sizeof(evaluacion))));
return

最佳答案

那么,首先,请告诉我们evaluacion 被定义为什么,并将do 放在与while 相匹配的地方;我假设它就在“int actual”行之后。

其次,看起来您可能比需要更频繁地调用 mmap();使用相同的 fd 调用 revisanotas() 的频率如何? mmap 调用本身很慢,就像 malloc;速度是当您使用映射文件时,在本例中,是 buffer 指向的数据。

第三,在循环外计算 datos.st_size/(sizeof(evaluacion)) 并更改 while 子句以与之进行比较。当前代码看起来像是在循环中每次迭代执行一次除法,而且除法很慢。

看看是否有帮助。

关于c - 使用 mmap 将文件投影到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1737582/

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