【发布时间】:2022-06-23 03:12:02
【问题描述】:
我最近在一次工作面试中被告知,他们的项目致力于为他们的应用程序构建最小大小的二进制文件(运行嵌入式),因此我将无法使用模板或智能指针等东西,因为这些会增加二进制文件的大小,他们通常似乎暗示使用 std 中的东西通常是不可行的(并非所有情况)。
面试后,我尝试在网上进行有关编码的研究,以及标准库中的哪些功能导致二进制文件变大,但我基本上找不到任何相关信息。有没有办法量化使用某些特性以及它们可能产生的大小影响(例如,无需在代码库中编写 100 个智能指针与自我管理)。
【问题讨论】:
-
不是我的专业领域,但我想搜索
c++ code bloat会为您带来大量意见。 -
就此而言,无论是否使用 STL 或任何框架,您都可以编写臃肿的代码。即使你自己编写了每一段 [库] 代码,你仍然可以让它膨胀。对嵌入式应用程序使用 STL、模板或智能指针没有任何问题。事实上,我什至建议使用它们,因为那样你就不会自己开枪了。保持你的代码干燥,你应该很高兴。
-
根据我的经验(在 1990 年代将 C++ 用于嵌入式应用程序),异常处理系统、运行时类型识别 (RTTI) 和动态内存 (
new/delete, @ 987654324@/delete[],malloc/free,因为我们没有堆)被禁用。模板很好,但没有使用那么多。智能指针在那时还不是一个东西,但由于我们没有堆,所以它已经无关紧要了。我们没有使用 I/O Stream 工具,但它可能也会被禁止。 -
对于某些功能,您可以尝试使用 Godbolt 或仅查看汇编器来衡量它。例如,对于模板,您必须根据具体情况判断使用它们会导致代码更小(间接性更少,函数调用更少)还是更大。
-
对于其他内容,您必须查看链接器输出。当我做一个这样的项目时,我添加了一个功能,没有意识到它作为依赖项将 iostreams 拉入,并且仅标准库的那部分就比我的整个内存大