gpt4 book ai didi

c - 如何将内存中已有的数据映射到文件中

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:27:13 26 4
gpt4 key购买 nike

我正在开发一个程序,该程序需要一次将多达几百张图像加载到内存中。每个文件占用 100mb,所以我真的不想将它们全部存储在内存中。我想对文件进行内存映射,以便操作系统在必要时将它们换出以节省物理内存。这就是我想知道的。如果我在 malloced 内存中的文件中已经有了我想要的数据,我应该打开一个文件描述符,使用 write() 将数据写入文件,然后映射文件。或者我可以内存映射一个新文件,然后使用 memcpy 复制数据。如果我要创建一个新文件,当我调用 mmap 时,给它的长度大于文件大小,它只会增加磁盘上文件的大小吗?

最佳答案

来自 POSIX 标准:“mmap() 函数可用于映射大于对象当前大小的内存区域。映射内但超出底层对象当前端的内存访问可能会导致 SIGBUS 信号被发送到进程。” ( http://pubs.opengroup.org/onlinepubs/9699919799/ )

就是说,如果您从页面对齐的 中获取它,您可以在刚刚写入的同一内存区域上尝试使用 mmap()MAP_FIXED aligned_alloc() 而不是 malloc(),或者 free 然后是 mmap()。但请注意,操作系统会将您有一段时间未使用的内存分页进行交换,您可以使用 posix_madvise() 来帮助它。

关于c - 如何将内存中已有的数据映射到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32940538/

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