C++运行时总是需要malloc()吗?

Bar*_*kle 5 c++ malloc bare-metal standard-library xilinx

我有一个运行裸机的C++应用程序,我希望尽可能小.

我没有在任何地方使用动态内存分配.我没有使用STL功能.我还用空函数覆盖了所有"delete"和"new"的变种.尽管如此,当我查看符号的排序列表时,我发现malloc()仍然是我编译的二进制文件中最大的项目之一.如果我能摆脱它,我可以将我的二进制缩小约25%.

C++运行时通常需要malloc()来进行幕后类型的工作吗?

(我正在使用Xilinx的gcc前端用于Microblaze架构,如果这很重要的话)

Pet*_*ter 4

程序对malloc()C 和 C++ 的依赖都可能发生,即使程序不直接使用它们。这是编译器和标准库的实现质量问题,而不是标准的要求。

这实际上取决于编译器启动代码(设置以便main()可以调用的代码)如何工作以及标准库代码如何实现。

例如,在 C 和 C++ 中,启动代码(在托管环境中)需要收集有关命令行参数的信息(可能复制到某个分配的缓冲区),连接到标准文件/流(如C++ 中的std::coutstd::cin ,以及 `stdout 和 stdin在C)中。这些事情中的任何一个都可能涉及动态内存分配(例如,与标准流关联的缓冲区)或执行程序实际上不需要的代码。