【问题标题】:Where the C macros stored in memory and how does it consumes more memory compared to functions?C 宏存储在内存中的位置以及与函数相比它如何消耗更多内存?
【发布时间】:2014-06-16 12:20:23
【问题描述】:

我在网上搜索了 C 宏将在哪里存储在内存中,与函数相比,它如何消耗更多内存?无法得到任何令人满意的答案。谁能告诉我确切的答案?

有什么方法可以找出c中的宏消耗的内存吗?

我想到的另一个问题是,假设我定义了一个宏#define START 10。并且我有变量 int i = 0,我将用这样的宏替换它 i = START。现在 int i =0 已经在堆栈中分配了内存,如果我将 START 放在 0 的位置,这将只是对先前分配的内存的重新放置。所以请告诉我在这种情况下它将如何消耗更多的内存。我不确定我的想法是否正确,如果我错了,请纠正我。

以前在本网站上提出的问题没有回答这些情况..

谢谢

【问题讨论】:

  • 你好黑客,以前的问题没有回答我在这里提出的问题谢谢
  • 其实我并不想关闭它。我只是将它标记为欺骗(非常接近)并且它被关闭了。现在重新开放。

标签: c macros


【解决方案1】:

宏是一种预处理器结构。在编译器甚至看到代码之前,所有宏都被它们的定义替换

这意味着如果您使用大量带有大替换的宏,它们将生成大量代码。函数调用不是这样工作的,因为它们调用的单个函数只有代码一次

没有标准的方法来计算有多少代码是由宏引起的,不。

【讨论】:

  • @pranathi 请避免将新问题发布为 cmets。无法接受 cmets,因此在本站发布问题是错误的方式。
  • 我确信可以通过-E -P 得到某种估计。
【解决方案2】:

存储在最终程序的内存中,而是在每次出现时重复宏的代码。就实际的编译器而言,它们甚至不存在,它们在到达之前就被预处理器取代了。

这通常占用更多内存的原因是每次使用宏时都会重复。没有通用的方法来确定它们将占用多少内存,但老实说,内存方面的考虑并不是更喜欢函数而不是宏的原因。

如果您迫切需要找出消耗的内存量,您可以通过查看使用宏的地方的反汇编并将宏在源代码中出现的次数乘以生产的拆卸线数。但是,不能保证宏的不同用途或不同情况下的相同用途会产生相同的代码,因此这只能是粗略的衡量标准。

【讨论】:

    【解决方案3】:

    C 宏的值在程序执行期间不存储在内存中。而是将它们的值复制到编译期间使用它们的任何位置。

    【讨论】:

      【解决方案4】:

      “这通常占用更多内存的原因是它获取 每次使用宏时都会重复。”

      根据编译设置(FAST CODE/SMALL CODE)使用现代编译器,它可能会发现常用代码并将其优化为函数(SMALL),或者它可能内联代码以提高速度(FAST)。

      代码并不总是更大,这取决于您的优化器有多好以及您使用的编译器设置。

      当然,您总是可以使用调用函数而不是包含大量内联代码的宏。这完全取决于您的选择。

      【讨论】:

        猜你喜欢
        • 2017-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-14
        • 2011-07-30
        • 2011-11-19
        • 2012-07-07
        • 2012-03-15
        相关资源
        最近更新 更多