低内存系统上的c ++。标准库正在使用所有内存!
我需要尽可能多地削减内存。我正在使用带有STL的标准C ++。该程序没有做太多(还),它仍然需要960Kb [根据
top
]!可执行文件大小仅为64KB。
代码是3000行长,我显然不会发布。我认为问题不在于我的代码,而在于系统库。
单个main()函数(包括我的所有代码但不使用它)使用732Kb的RAM!
简单代码:
int main() {
sleep(1000); //do nothing
return 0;
}
//Uses 732kb of RAM
我的代码没有全局变量(除了隐藏在我的库中的变量)。
我正在使用标准库:libstdc ++(STL),GNU libc。还有一个BSD套接字和libev以及非标准的STL绳索类。
我可以运行一些内存分析器吗?
平台:Linux 2.6.18-32,32位处理器,16MB总系统RAM,无可用交换
编译:GCC 4
标准库:GCC的libstdc ++
编译器选项:-Os(无调试符号)
我没有大量使用模板:容器和迭代器都是。但是我正在大量使用SGI STL绳索类。
测试环境是运行Linux的基本服务器,具有128MB RAM,Pentium III 667 Mhz,CentOS 5.5,无需仿真。
更新:我想知道库本身(代码大小)是否导致问题。不需要将共享库加载到RAM中吗?
没有找到相关结果
已邀请:
4 个回复
括宠
替换
并且你的内存使用率仍然很高,那么查看代码和静态数据 - 在全局范围内初始化的任何内容或类或函数内的静态内容,以及不同类型的模板实例化和调试符号。 更新:删除了有关STL分配器的错误注释。它可能适用于其他编译器/ STL版本(如果要查看它,请检查历史记录),但它不适用于此问题。 请注意,
/
通常会吝啬将可用内存返回给操作系统,这将导致整个程序不会随着时间的推移缩小其显而易见的使用率;通过将来的分配,内存将在整个程序中重用,所以除了将“内存使用”数字无限期地保持在高水位或接近高水位线之外,这通常不是一个大问题。
桔马牛
的文档以获取解决方法,或者只是将其卡住并使用
。但是要小心找到一种方法来考虑代码,堆栈和全局使用情况。
杭难插
疾很毋悲