![]() |
1
6
假设数据来自一个文件,那么最好对该文件进行内存外映射。否则,您最终要做的就是分配数组,然后将数据从文件复制到数组中——由于数组被映射到页面文件,所以您基本上只是将原始文件复制到页面文件,并且在这个过程中会污染“缓存”(即物理内存),所以其他当前处于活动状态的数据有很多是被驱逐的机会。然后,完成后,您(通常)将数据从数组写回原始文件,这(在本例中)意味着从页面文件复制回原始文件。 内存映射文件只是创建一些地址空间,并将其直接映射到原始文件。这避免了将数据从原始文件复制到页面文件(完成后再次复制)以及在从原始文件到页面文件的过程中临时将数据移动到物理内存中。当然,最大的胜利是当/如果原始文件中有大量的部分您根本没有真正使用过(在这种情况下,它们可能永远不会被读取到物理内存中,假设未使用的块至少有一个页面大小)。 |
![]() |
2
0
如果数据在一个大文件中,请使用mmap进行读取。现代计算机内存太多,可能没有足够的交换空间。 |
![]() |
sponce · Fortran中的大VIRT内存 7 年前 |
![]() |
jinan · 地址的大小是否与条目数、条目总数或两者都有关系? 8 年前 |
![]() |
Belphegor · 什么是页表、页和页表条目? 9 年前 |
![]() |
psaw.mora · 页面表条目无效如何在进程之间传递? 9 年前 |
![]() |
Curious · 操作系统中的页面错误处理程序在哪个堆栈上运行 9 年前 |
![]() |
user567879 · /proc/pid/maps的内容 11 年前 |
|
user1382306 · 虚拟内存已耗尽:无法分配内存 12 年前 |