在读取大文件时分配数组的最佳方法是什么

时间:2018-01-08 16:52:53

标签: c memory-management

我有一个大约100 MB的文件,需要处理。

获得该文件的尺寸(h& w)后,我应该将数据读入数组。我正在考虑如何做到这几点:

1。静态(自动)

int matrix[h][w];

2。动态

// similar to above, but using malloc

我担心限制(并释放内存)。

此外,如果静态数组的范围结束,是否会释放它?

2 个答案:

答案 0 :(得分:0)

在我的情况下,解决方案是使用动态分配。

似乎int matrix[h][w];将数据放入堆栈,这是有限的(小),而使用malloc()将数据放入堆中,这大到75%的虚拟内存(在Linux中)

答案 1 :(得分:0)

这取决于应用程序,但大多数时候一个好的方法是将文件映射到内存。在现代操作系统上,这将返回指向文件内容的指针,并使硬盘驱动器上的文件像交换文件一样工作:应用程序只会将其内容视为内存,但操作系统只会将页面加载到内存中(它希望你访问它们。如果您只需要阅读文件的一小部分,这可以为您节省大量时间和复杂性。

这是the glib library does file I/O的方式,或者它可以通过Unix / Linux上的hls_segment_size=500000以及Windows API中的一组不同功能获得。