none
c++ 按行读取300mb的文件狂吃内存 RRS feed

  • 问题

  • 程序片段如下:

    ifstream in("test");
    string line;
    
    while ( getline(in, line) )
    {
             // 对line进行处理
    }

    当处理一个300mb的文件时,运行程序的时候会发现内存使用不断飙升,请问是因为每次line所占的空间没有被释放吗,还是其它原因?

    2011年10月2日 11:16

答案

  • 你好,

     

    getline方法默认获取到换行符('\n')才结束,所以如果您的需要读取的文件中,有某行数据比较长,就是会造成输入流不断的消耗内存,而您如果没有释放这些内存。那他们会一直占用,直到内存被消耗。


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Rob Pan 2011年10月7日 2:03
    2011年10月4日 7:29
  • 如果你没有及时释放内存那300M的文件读进来内存增大是很正常的事啊
    • 已标记为答案 Rob Pan 2011年10月7日 2:03
    2011年10月4日 7:30

全部回复

  • 你好,

     

    getline方法默认获取到换行符('\n')才结束,所以如果您的需要读取的文件中,有某行数据比较长,就是会造成输入流不断的消耗内存,而您如果没有释放这些内存。那他们会一直占用,直到内存被消耗。


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Rob Pan 2011年10月7日 2:03
    2011年10月4日 7:29
  • 如果你没有及时释放内存那300M的文件读进来内存增大是很正常的事啊
    • 已标记为答案 Rob Pan 2011年10月7日 2:03
    2011年10月4日 7:30