使用 std::stringstream,小心 内存! 适时 清空 缓冲 ……
2007年12月14日 星期五 :
stringstream是个好东西,网上有不少文章,讨论如何用它实现各种数据类型的转换(比如把double或int转换为string类型)。但如 果stringstream使用不当,当心内存出问题(我就吃过亏^_^)。 试试下面的代码,运行程序前打开任务管理器,过不了几十秒,所有的内存都将被耗尽! #include <cstdlib>
#include <iostream>
#include <sstream> using namespace std; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int main(int argc, char * argv[])
{
std::stringstream stream;
string str; while()
{
//clear(),这个名字让很多人想当然地认为它会清除流的内容。
//实际上,它并不清空任何内容,它只是重置了流的状态标志而已!
stream.clear(); // 去掉下面这行注释,清空stringstream的缓冲,每次循环内存消耗将不再增加!
//stream.str(""); stream<<"sdfsdfdsfsadfsdafsdfsdgsdgsdgsadgdsgsdagasdgsdagsadgsdgsgdsagsadgs ";
stream>>str; // 去掉下面两行注释,看看每次循环,你的内存消耗增加了多少!
//cout<<"Size of stream = "<<stream.str().length()<<endl;
//system("PAUSE");
} system("PAUSE ");
return EXIT_SUCCESS; } 把stream.str(""); 那一行的注释去掉,再运行程序,内存就正常了 看来stringstream似乎不打算主动释放内存(或许是为了提高效率),但如果你要在程序中用同一个流,反复读写大量的数据,将会造成大量的内存消 耗,因些这时候,需要适时地清除一下缓冲 (用 stream.str("") )。 另外不要企图用 stream.str().resize(),或 stream.str().clear() 来清除缓冲,使用它们似乎可以让stringstream的内存消耗不要增长得那么快,但仍然不能达到清除stringstream缓冲的效果(不信做个 实验就知道了,内存的消耗还在缓慢的增长!),至于stream.flush(),

最新文章

  1. Maven提高篇系列之(四)——使用Profile
  2. MVC中的JS和CSS压缩
  3. Hibernate的缓存技术详解
  4. 百度地图开发的学习(一)——配置环境&amp;基础地图
  5. 【Android UI设计与开发】6.底部菜单栏(三)使用Fragment+PopupWindow仿QQ空间最新版底部菜单栏
  6. svn项目冲突时显示无法加载项目的解决方法
  7. apache rewrite .htaccess 站点内容重定向实例
  8. Oracle Dataguard HA (主备,灾备)方案部署调试
  9. Asp.Net 常用工具类之Office-文档操作(6)
  10. 超越村后端开发(5:远程同步本地与服务器端的MySQL数据库)
  11. 使用Bootstrap Bar来增加Onboarding Progress Bar功能。
  12. vue的一些注意点
  13. Media Query-响应式布局
  14. 8、jsのBOM对象与DOM对象
  15. ODPS
  16. multiple definition of qt_plugin_query_metadata
  17. Supported Values for @SuppressWarnings(转)
  18. 数据库事务隔离级别+Spring 声明性事务隔离级别
  19. (转)Python黑魔法 --- 异步IO( asyncio) 协程
  20. 【Android】ADB常用指令与logcat日志

热门文章

  1. 20SpringMvc_结果的转发可共享参数;重定向不能共享参数
  2. HTTPS实现原理
  3. Linux 网络编程八(epoll应用--大并发处理)
  4. Linux 进程与线程三(线程比较--创建线程参数)
  5. Linux 进程通信(共享内存区)
  6. 使用js使某个按钮在5秒内不能重复点击
  7. js window.open()实现打印,如何在关闭打印窗口时刷新父窗口
  8. 基于IHttpAsyncHandler的TCP收发器
  9. [CareerCup] 5.4 Explain Expression ((n &amp; (n-1)) == 0) 解释表达式
  10. web安全——简介