一般来说,使用C++模板是否会产生比使用宏执行相同代码更大的可执行文件

In general, does using C++ templates produce larger executables than doing the same code with macros?

本文关键字:执行 代码 可执行文件 C++ 使用 是否 一般来说      更新时间:2024-03-28

在C中,当您想进行通用编程时,您唯一支持的语言选项是。它们工作得很好,被广泛使用,但如果你能用内联函数或正则函数来代替,就不鼓励使用它们。(如果使用gcc,也可以使用gcc语句表达式,这样可以避免双重评估"bug"。示例。(

然而,C++已经通过创建模板消除了所谓的宏"邪恶"。我对C++这门成熟的巨大语言还有些陌生(我估计它的功能和语言结构必须是C的4到5倍(,通常都喜欢宏或gcc语句表达式,但我越来越被迫使用模板来代替它们。这就引出了一个问题:通常,在C++中进行通用编程时,哪种程序会产生更小的可执行文件:宏还是模板

如果你说"尺寸不重要,选择安全而不是尺寸",我会继续阻止你。对于大型计算机和应用程序编程,这可能是真的,但对于Arduino、ATTiny85上的微控制器编程,程序或其他小型设备的闪存空间为8KB,这是无稽之谈。尺寸也很重要,所以必须进行权衡。

在进行泛型编程时,哪一个为相同的代码生成较小的可执行文件?宏还是模板?欢迎任何其他见解。

相关:

  1. c++模板会使程序变慢吗

旁注:

  1. 有些事情只能用宏而不是模板来完成。例如,非名称损坏的字符串化/字符串化和X宏。有关X宏的详细信息:
    1. X-Macros的真实世界使用
    2. https://www.geeksforgeeks.org/x-macros-in-c/
    3. https://en.wikipedia.org/wiki/X_Macro

在2020年这个历史时刻,这只是优化器的工作。你可以通过组装获得更好的速度,关键是它在尺寸和速度上都不值得。通过适当的C++编程,您的代码将足够快和足够小。通过扰乱代码的可读性来获得更快或更小的速度是不值得麻烦的。

也就是说,宏在预处理器级别替换内容,模板在编译级别替换内容。使用宏可能会获得更快的编译时间,但一个好的编译器会比宏更优化它们。这意味着你可以有相同的exe大小,或者可能更少的模板。

应用程序中99%的速度或大小问题来自程序员的错误,而不是语言。我经常发现,在我的可执行文件中,一些照片资源是PNG,而不是正确的JPG,瞧,我有点膨胀。或者我不小心忘记了使用weak_ptr来破坏引用,现在我有两个共享指针,它们共享100MB的内存,但不会被释放。这几乎总是人为的错误。

一般来说,在C++中进行通用编程时,哪种程序会产生更小的可执行文件:宏还是模板

测量。假设您在编写这两个版本时都做得很好(请参阅上面的第一点(,的编译器是不错的,和的代码对这两个都有同样的同情,那么应该不会有显著的差异。

如果你用模板写的东西要大得多——问一个特定的问题。

请注意,链接问题的答案是关于多个不可合并的实例化。IME函数模板通常是内联的,在这种情况下,它们的行为非常像类型安全的宏,如果内联站点是相同的代码,那么没有理由让它更大。例如,如果您开始获取函数模板实例化的地址,则会发生变化。

。。。C++通常都喜欢宏。。。越来越多的人被迫使用模板代替模板。

你需要正确地学习C++。也许你已经有了,但不太使用模板:这仍然让你很难写出一个好的比较。

这引出了的问题

不,它提示问题。