一般来说,使用C++模板是否会产生比使用宏执行相同代码更大的可执行文件
In general, does using C++ templates produce larger executables than doing the same code with macros?
在C中,当您想进行通用编程时,您唯一支持的语言选项是宏。它们工作得很好,被广泛使用,但如果你能用内联函数或正则函数来代替,就不鼓励使用它们。(如果使用gcc,也可以使用gcc语句表达式,这样可以避免双重评估"bug"。示例。(
然而,C++已经通过创建模板消除了所谓的宏"邪恶"。我对C++这门成熟的巨大语言还有些陌生(我估计它的功能和语言结构必须是C的4到5倍(,通常都喜欢宏或gcc语句表达式,但我越来越被迫使用模板来代替它们。这就引出了一个问题:通常,在C++中进行通用编程时,哪种程序会产生更小的可执行文件:宏还是模板
如果你说"尺寸不重要,选择安全而不是尺寸",我会继续阻止你。对于大型计算机和应用程序编程,这可能是真的,但对于Arduino、ATTiny85上的微控制器编程,程序或其他小型设备的闪存空间为8KB,这是无稽之谈。尺寸也很重要,所以必须进行权衡。
在进行泛型编程时,哪一个为相同的代码生成较小的可执行文件?宏还是模板?欢迎任何其他见解。
相关:
- c++模板会使程序变慢吗
旁注:
- 有些事情只能用宏而不是模板来完成。例如,非名称损坏的字符串化/字符串化和X宏。有关X宏的详细信息:
- X-Macros的真实世界使用
- https://www.geeksforgeeks.org/x-macros-in-c/
- https://en.wikipedia.org/wiki/X_Macro
在2020年这个历史时刻,这只是优化器的工作。你可以通过组装获得更好的速度,关键是它在尺寸和速度上都不值得。通过适当的C++编程,您的代码将足够快和足够小。通过扰乱代码的可读性来获得更快或更小的速度是不值得麻烦的。
也就是说,宏在预处理器级别替换内容,模板在编译级别替换内容。使用宏可能会获得更快的编译时间,但一个好的编译器会比宏更优化它们。这意味着你可以有相同的exe大小,或者可能更少的模板。
应用程序中99%的速度或大小问题来自程序员的错误,而不是语言。我经常发现,在我的可执行文件中,一些照片资源是PNG,而不是正确的JPG,瞧,我有点膨胀。或者我不小心忘记了使用weak_ptr来破坏引用,现在我有两个共享指针,它们共享100MB的内存,但不会被释放。这几乎总是人为的错误。
一般来说,在C++中进行通用编程时,哪种程序会产生更小的可执行文件:宏还是模板
测量。假设您在编写这两个版本时都做得很好(请参阅上面的第一点(,和的编译器是不错的,和的代码对这两个都有同样的同情,那么应该不会有显著的差异。
如果你用模板写的东西要大得多——问一个特定的问题。
请注意,链接问题的答案是关于多个不可合并的实例化。IME函数模板通常是内联的,在这种情况下,它们的行为非常像类型安全的宏,如果内联站点是相同的代码,那么没有理由让它更大。例如,如果您开始获取函数模板实例化的地址,则会发生变化。
。。。C++通常都喜欢宏。。。越来越多的人被迫使用模板代替模板。
你需要正确地学习C++。也许你已经有了,但不太使用模板:这仍然让你很难写出一个好的比较。
这引出了的问题
不,它提示问题。
- 需要将此代码更改为执行代码
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- 单步执行代码时重复上一行
- 如何使用介子在C++中执行代码覆盖?
- Visual Studio 2017,C++,在单步执行代码时指向错误的行
- 在 R 中执行C++代码
- 通过 dll 注入在主线程中执行代码
- 无法在 c++ 中循环后执行代码
- 执行C 代码时快速频繁的文件访问
- 执行 C++ 代码后出错
- 一个人如何从代表函数的字符串中执行运行时执行C 代码
- 是否可以在程序崩溃后执行代码?
- 第一次在 Linux 上执行 c++ 代码的时间非常慢
- 计算 JSON 中的条目数并相应地执行代码
- 将在 CATCH 块之后执行代码
- 分析执行C++代码的每一行所花费的确切时间
- 我在执行代码时不断得到"Bus Error"?
- c while()..执行代码行的条件
- 从并行线程在主 Maya 线程上执行代码
- 在调用GNUPLOT之后,如何继续执行C 代码