【发布时间】:2023-03-12 12:13:02
【问题描述】:
我需要尽可能多地削减内存。我正在使用带有 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 中吗?
【问题讨论】:
-
没有任何代码,几乎不可能告诉你从哪里开始。
-
没有代码,没有好的帮助。请贴出代码(你说这是一个非常基本的 C++ 程序)。
-
程序在做什么(或应该做什么)?
-
@nightcrack,它是一个 HTTP 透明代理,可用 3MB 内存运行。
-
您使用的是哪个标准库和编译器?您正在构建调试或发布二进制文件吗?你在剥离符号吗?您是否使用大量不同的模板参数来实例化 STL 模板?
标签: c++ stl embedded low-memory