我正在编写一个程序(公平警告,这是一个家庭作业问题),它会将它收到的5000万个浮点数作为输入文件进行排序并将它们输出到另一个文件中。我正在使用UNIX标准的read()和write()调用来读入输入并将它们写入文件,但由于这些调用有多少,它似乎运行得非常慢。
以下是阅读的相关代码:
floats* input = make_floats(0); // input floats
int ifd = open(iname, O_RDONLY, 0644);
long count; // temp to get count
read(ifd, &count, sizeof(long)); // read in count
// read in numbers from input
for (int i = 0; i < count; ++i) {
float num;
read(ifd, &num, sizeof(float));
floats_push(input, num);
}
它一次一个地读入一个浮点向量(即浮点数*)。
以下是写作:
floats* xs = make_floats(0);
int ofd = open(args->output, O_WRONLY, 0644);
int xs_counter = 0;
// write the local array to file
for (int i = start; i < end; ++i) {
write(ofd, &(xs->data[xs_counter]), sizeof(float));
++xs_counter;
}
开始和结束基本上是我写的多少。我想知道我是否可以基本上把这些变成一个大规模的读写通话,但我有点迷失方向(代码工作得很好,但它很慢)
由于
答案 0 :(得分:1)
尝试用一次读取替换所有这些读取调用:
float *numbers = malloc(sizeof(float) * count);
read(ifd, numbers, sizeof(float) * count);