我应该回收指针和引用还是创建新的?

时间:2017-01-05 19:46:37

标签: c file pointers

我怀疑处理C中的指针。 在我的程序执行期间,我必须打开和关闭配置文件,但由于不同的程序更新其内容,我必须在程序运行时多次这样做。所以我做了一个小函数,它读取文件并关闭它,我每次需要它时都会调用它。

List<string>

如果我没有弄错,这个函数每次运行时都会创建一个新的FILE *指针,但是我想知道是否使用范围更大的FILE *指针并且每次运行函数时都会更好。含义:

int readConfigFile()
{
    FILE* pfile = fopen("path to file", "r");
    fseek(pFile, 0, SEEK_END);
    lSize = ftell(pFile);
    rewind(pFile);

    text = (char*)malloc(sizeof(char) * lSize);
    if (text == NULL) {
        fputs("Memory error", stderr);
        return (0);
    }
    if (fread(text, 1, lSize, pFile) <= 0) {
        printf("Nothing read");
        return 0;
    }

    text[lSize] = '\0';
    //Do the actual reading
}

我很担心,因为据我所知,C ++中没有垃圾收集器,第一个函数会创建太多的FILE *指针,如果运行的时间足够长,并且会溢出我的内存。另一方面,有一个全局指针,它将在单个函数的上下文中打开和关闭,看起来相当浪费,而且不是很模块化,至少在我看来是这样。

那么我应该回收我的指针,还是任何参考资料,或者可以根据需要申报新的指针?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用freopen()

http://en.cppreference.com/w/cpp/io/c/freopen

无法保证它实际上会重用为“旧”文件分配的动态内存。这个函数也可以是fclose()fopen()的包装器 - 它是所有实现定义的。

从我看到的,newlib(一种流行的嵌入式目标libc)重用了FILE存储,所以这里有一个很小的收益。它是否会产生明显的差异是另一回事。

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=newlib/libc/stdio/freopen.c;h=fb1f6c4db3f294f672d7e6998e8c69215b7482c1;hb=HEAD