【发布时间】:2020-10-28 00:52:39
【问题描述】:
假设 C++ getline() 从某个文件中读取,该文件有一个超出系统内存容量的大行(在超出内存容量之前没有换行符)。那么while(getline(cin, line)) 循环会做什么呢?
而且,如果我需要通过抛出异常或其他方式来处理这种可能的边缘情况,我该怎么做?
【问题讨论】:
-
当库函数分配内存失败时一般会发生什么(例如
std::vector.resize)?为什么你认为std::getline会有所不同? -
比你想象的更难捕捉。使用虚拟内存可以分配大量存储空间,比您计算机中可能拥有的存储空间多很多倍。从技术上讲,当程序要求的内存超出其所能获得的内存时,您会收到
bad_alloc异常,但操作系统可能在使用之前不会真正提供该存储。因此,系统很可能会允许分配,然后当承诺的存储无法满足时崩溃并烧毁,或者系统会因为一些较慢的存储被用作交换空间以提供更多空间而缓慢爬行。