当我循环遍历文件A中的行时,我正在解析行并将每个字符串(char*
)放入char**
。C malloc/free + fgets性能
在行尾,我运行一个包含打开文件B的过程,使用fgets
,fseek
和fgetc
来抓取该文件中的字符。然后关闭文件B.
我重复重新打开并重新关闭文件B的每一行。
我想知道的是:
是否有使用
malloc
和free
一个显著的性能损失,这样,我应该使用什么样的静态的myArray[NUM_STRINGS][MAX_STRING_WIDTH]
而不是动态char** myArray
?是否有打开和关闭文件B(概念上,数千次)的显着性能开销?如果我的文件A已排序,是否有一种方法可以让我使用
fseek
在文件B中向后移动,以重置之前位于文件B中的位置?
编辑原来,两方面的做法大大降低了运行时:
我的文件B其实是24文件中的一个。我打开B1文件B1一次,关闭它,B2打开一次,关闭它,等等,而不是打开相同的文件B1千次,然后打开B2一千次。这将操作的数千个操作减少到大约几千个24.
我用
rewind()
来重置文件指针。
这产生了大约60倍的速度改进,这是绰绰有余。感谢您指点我rewind()
。
如果你不得不跳回到一个特定的*,以前在文件中的位置(而不是开始),你可能也想看看fgetpos()和fsetpos()。 – DevSolar 2009-11-12 10:46:57