現在我正在處理大文件,其大小大於(1.5 GB)。所以我用File::Map。當輸入大於2.1 GB腳本失敗,並顯示錯誤Use of uninitialized value $count in print at file.pl line 16.。 但是腳本運行2.1GB and below 2.1GB 我的腳本如下 use warnings;
use strict;
use File::Map
char *p = (char*) mmap(...);
....; /* check if p is not -1 */
a = *p;
運行最後一條語句時,發生頁面錯誤。內核中的錯誤處理程序將在物理內存中分配頁面,並將4K字節從文件複製到該頁面中,然後修改頁面條目。讀取*p的指令將在此次成功執行。 但是,錯誤處理程序如何知道與頁面相關的文件名和路徑。文件名(或fd)在哪裏存儲?和文件中
http://man7.org/linux/man-pages/man2/mmap.2.html說 MAP_ANONYMOUS
The mapping is not backed by any file; its contents are
initialized to zero.
爲什麼要初始化內容爲零?我認爲這可能相當昂貴。