gpt4 book ai didi

c++ 在低内存系统上。标准库正在使用所有内存!

转载 作者:行者123 更新时间:2023-11-30 01:29:39 25 4
gpt4 key购买 nike

我需要尽可能多地削减内存。我正在使用带有 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,Pentium III 667 Mhz,CentOS 5.5,无仿真。

更新:我想知道库本身(代码大小)是否导致了问题。共享库不需要加载到 RAM 中吗?

最佳答案

开始剥离功能,直到内存使用率下降。首先走极端——如果你可以将 main 替换为 sleep(1000); 并且你的内存使用率仍然很高,请查看代码和静态数据——任何在全局初始化的东西类或函数内的作用域或静态,以及不同类型和调试符号的模板实例化。

更新:删除了关于 STL 分配器的错误注释。它可能适用于其他编译器/STL 版本(如果您想查看它,请查看历史记录)但它不适用于此问题。

请注意,malloc/operator new 在将可用内存还给操作系统方面通常会很吝啬,这将导致您的程序作为一个整体不会缩小其外观随着时间的推移使用;该内存将通过 future 的分配在整个程序中重复使用,因此除了将您的“内存使用”数字无限期地保持在或接近其高水位线之外,这通常不是一个大问题。

关于c++ 在低内存系统上。标准库正在使用所有内存!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5569127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com