C++读取文件时疑似内存泄漏?附代码求分析
分析你的C++文件读取内存问题
嘿,我来帮你拆解下你遇到的这个内存问题~首先先提个明显的代码小错误:你代码里写的vector<"string">是语法错误哦,应该去掉引号写成vector<string>,不然编译器根本过不了,估计是你输入时手滑多打了引号。
接下来聊内存占用的核心问题:
- 你的程序加载文件后内存飙到2G,大概率是因为
company_names.txt本身就非常大——比如里面有几百万甚至上千万行字符串,每个字符串都要占用内存,再加上vector为了高效插入会预分配一些额外容量,总占用2G是完全合理的,这不一定是内存泄漏。 - 你用
vector<string>().swap(company);来清空vector,这个操作本身是有效的:它会把原vector的内存和一个临时空vector交换,临时vector销毁时会把原内存归还给内存分配器。但为什么htop里可能还能看到高内存占用?这是Linux系统内存管理的特性:进程释放的内存会先回到glibc的内存池里,不会立刻还给操作系统,所以htop显示的VSZ(虚拟内存)可能还是很高,但RSS(常驻内存,实际占用的物理内存)应该已经降下来了。如果想强制把空闲内存还给系统,Linux下可以加一行malloc_trim(0);(注意这是GNU扩展,不是标准C++)。
另外补充几个小细节:
read函数里的ifstream ifs是局部变量,函数结束时会自动析构关闭文件,这部分没问题,不会泄漏文件句柄。- 其实
test函数里的company是局部变量,函数执行完后会自动析构,本来不需要手动调用swap来释放内存,不过swap是一种主动触发内存释放的方式,在某些场景下有用。
最后再确认下:如果程序退出后内存回到正常水平,那根本不是内存泄漏——内存泄漏是指程序运行过程中持续占用内存不释放,即使不再需要。你这个情况更像是正常的内存使用加上操作系统内存回收的延迟。
内容的提问来源于stack exchange,提问作者yanwii
相关产品推荐
相关产品推荐

