我正在從文件讀取浮動矩陣。矩陣的尺寸是4k * 4K。在下面的程序中,它會導致現在()函數奇怪地重置。如果我將矩陣大小減小到1k * 1K,則不會重置。雖然它正確地讀取浮動,但最後幾個值是垃圾。我不知道這些垃圾價值來自哪裏。由於浮點數的位數在5-6左右,因此我將BUFFSIZE的大小設爲6。不知道它是否正確。4k * 4K浮動的mmap導致分段錯誤
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <stdlib.h>
#include <sstream>
#define ROWS 4000
#define COLS 4000
#define BUFFSIZE 6
//#define USE_FREAD
#define USE_MMAP
double now()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec + tv.tv_usec/1000000.;
}
int main()
{
double end_time;
double total_time;
int i, x, y, k;
for (k = 0; k < 1; k++)
{
double start_time = now();
FILE* in = fopen("resistence_file", "rb");
float arr[ROWS][COLS];
char temp[BUFFSIZE];
int val;
std::stringstream ss;
char* floats = (char*)mmap(
0,
ROWS * COLS * sizeof(float),
PROT_READ,
MAP_FILE | MAP_PRIVATE,
fileno(in),
0
);
fclose(in);
ss<<floats;
for (int i =0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
if ((ss.getline(temp, BUFFSIZE, ' ')))
{
arr[i][j] = atof((temp));
}
}
}
for (int i =0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
printf("%.1f ", arr[i][j]);
}
printf("\n");
}
munmap(floats, ROWS * COLS * sizeof(float));
end_time = now();
total_time = end_time - start_time;
printf("It took %f seconds to read %d * %d matrix \n", total_time, ROWS, COLS);
}
return 0;
}
爲了提高可讀性,完成了拆分到多行的功能。你真的認爲你的'mmap'調用更具可讀性嗎? – Wug