c++ - 通常,使用C++模板会产生比使用宏执行相同代码更大的可执行文件吗?

标签 c++ templates macros size

在C语言中,当您想要进行通用编程时,唯一受语言支持的选项是。它们效果很好并且被广泛使用,但是如果可以使用内联函数或常规函数,则不建议使用它们。 (如果使用gcc,您还可以使用gcc statement expressions,它避免了双重评估“bug”。Example。)

但是,C++通过创建模板消除了宏的所谓“邪恶”。对于C++语言的庞大庞然大物,我还是有些陌生(我估计它的功能和语言构造必须是C的4或5倍),并且通常偏爱宏或gcc语句表达式,但是越来越多的人被迫使用模板代替它们。这就引出了一个问题:通常,用C++进行通用编程时,将生成较小的可执行文件:宏还是模板?

如果您说“大小无关紧要,选择安全胜于大小”,我将继续阻止您。对于大型计算机和应用程序编程,这可能是正确的,但对于在Arduino,具有8KB Flash空间用于程序的ATTiny85或其他小型设备上进行微 Controller 编程的情况,这是很麻烦的。大小也很重要,因此必须进行权衡。

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

有关:

  • Do c++ templates make programs slow?

  • 边注:
  • 有些事情只能用宏来完成,不能用模板来完成。以non-name-mangled stringizing/stringifying和X宏为例。有关X宏的更多信息:
  • Real-world use of X-Macros
  • https://www.geeksforgeeks.org/x-macros-in-c/
  • https://en.wikipedia.org/wiki/X_Macro
  • 最佳答案

    在2020年这个历史时期,这只是优化程序的工作。使用组装可以提高速度,但要注意的是,尺寸和速度都不值钱。通过适当的C++编程,您的代码将足够快且足够小。通过弄乱代码的可读性来变得更快或更小是不值得的。

    也就是说,宏在预处理器级别替换了东西,模板在编译级别替换了东西。使用宏可能会加快编译时间,但是好的编译器会比宏更优化它们。这意味着您可以具有相同的exe大小,或者使用模板可以更少。

    在应用程序中,速度或大小方面的巨大麻烦(99%)来自程序员的错误,而不是语言。很多时候,我发现可执行文件中的某些图片资源是PNG而不是适当的JPG,瞧,我有点a肿。或我无意间忘记了使用weak_ptr来中断引用,现在我有两个共享的指针,它们共享不会释放的100MB内存。这几乎总是人为错误。

    关于c++ - 通常,使用C++模板会产生比使用宏执行相同代码更大的可执行文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61376144/

    相关文章:

    c++ - 静态字段的析构函数。单例实现

    c++ - Variadic 模板包装函数调用

    c++ - 将固定大小的特征矩阵作为参数传递给调用动态大小矩阵的函数

    vba 宏 - 有时有效,有时无效

    c++ - 在 C++ 中处理指向层次结构中成员函数的指针

    C++ 可运行类

    c++ - 如何从模板特化中找到重复的定义?

    c++ - 通过另一个宏创建的函数创建所有列表的宏

    JavaScript 在 Firefox 的 iMacros 插件中的多个宏之间切换

    c++ - 在同一个应用程序中使用 float 和双重支持编译 kiss fft