【发布时间】:2016-05-17 04:34:05
【问题描述】:
好吧,我没有学过计算机科学的好处,所以对于那些已经学过的人来说,这可能是一个简单的问题。 基本上正如标题所说,是什么阻止了我创建一个巨大的缓冲区,比 fread() 函数使用的文件大小要大得多。 据我了解,fread() 将返回成功读取的元素总数,因此我可以将缓冲区重新分配回文件大小。
#include <stdio.h>
#include <stdlib.h>
int main () {
FILE * pFile;
long lSize;
char * buffer = NULL;
size_t result = 0;
pFile = fopen ( "test.txt" , "r" );
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}
// memory is cheap!! size:
lSize = 1000000;
buffer = (char*) realloc(buffer, (sizeof(char) * lSize));
if (buffer)
{
result += fread(buffer, sizeof(char), 1, pFile);
}
// copy the file into the buffer:
result = fread (buffer,1,lSize,pFile);
/* file is now loaded in the memory buffer. Now resize buffer */
buffer = (char*) realloc(buffer, (sizeof(char) * result));
// tidy up
printf("\n%s",buffer);
free(buffer);
fclose (pFile);
return 0;
}
这只是我所说的一个示例。我假设文件大小是
【问题讨论】:
-
基本上没有。事实上,为什么要重新分配它?
-
好吧,只是为了为下一个文件释放内存,基本上就目前而言,我可以获取所有可用内存加载 myfile,然后重新分配以释放该内存。我想我真正想知道的是这种形式的贪婪编程是正确的方式吗?
-
buffer 只是一个缓冲区,你可以选择你想要的分配方式。通常你会使用一个合理的值。为什么要使用巨大的价值?显然没有任何好处。
-
@Shauny 好的,如果应用程序要打开更多文件,当然可以。您的示例应用只打开了一个。
-
@terencehill 显然有。如果可以避免 realloc 调用,就可以避免内存分配和潜在的批量数据复制。