【发布时间】:2012-12-17 11:42:36
【问题描述】:
我一直在通过使用文件映射来减少使用多个大型数组的程序的内存占用。由于我不知道这些数组的所需大小,我将大小高估到我知道数组无法达到的水平,然后将文件截断到最终大小,我完成了数组。 幸运的是,我用来创建映射文件的代码(在这篇文章的底部)在我尝试过的每台机器上创建了稀疏文件。如果没有,就会有磁盘空间问题。
问题是:在映射之前调用 lseek 来扩展文件可以保证创建一个稀疏文件,或者至少可以依靠任何合理的 Linux 发行版以及 Solaris 来这样做。
还有什么方法可以检查创建的文件是否稀疏,因为退出可能比尝试创建数百 GB 的非稀疏文件更好。
output_data_file_handle = open(output_file_name,O_RDWR | O_CREAT ,0600);
lseek(output_data_file_handle,output_file_size,SEEK_SET);
write(output_data_file_handle, "", 1);
void * ttv = mmap(0,(size_t)output_file_size,PROT_WRITE | PROT_READ, MAP_SHARED,output_data_file_handle,0);
【问题讨论】:
-
我认为这是获得
lseek所需语义的一种显而易见的方法,但我相信它作为实现细节保持开放。
标签: c linux solaris sparse-matrix