性能和内存使用方面的“静态const”,“#define”和“enum”之间的区别

时间:2014-01-23 17:28:35

标签: c++ c performance gcc compilation

由于#define语句的内联,可能有任何内容。

我理解答案可能依赖于编译器,然后让GCC为。

已经有类似的问题about Cabout C++,但它们更多是关于使用方面的问题。

2 个答案:

答案 0 :(得分:6)

编译器会根据给定的基本优化对它们进行相同的处理 检查相当容易 - 考虑以下c代码:

#define a 1
static const int b = 2;
typedef enum {FOUR = 4} enum_t;

int main() {

    enum_t c = FOUR;

    printf("%d\n",a);
    printf("%d\n",b);
    printf("%d\n",c);

    return 0;
}

使用gcc -O3编译:

0000000000400410 <main>:
  400410:       48 83 ec 08             sub    $0x8,%rsp
  400414:       be 01 00 00 00          mov    $0x1,%esi
  400419:       bf 2c 06 40 00          mov    $0x40062c,%edi
  40041e:       31 c0                   xor    %eax,%eax
  400420:       e8 cb ff ff ff          callq  4003f0 <printf@plt>
  400425:       be 02 00 00 00          mov    $0x2,%esi
  40042a:       bf 2c 06 40 00          mov    $0x40062c,%edi
  40042f:       31 c0                   xor    %eax,%eax
  400431:       e8 ba ff ff ff          callq  4003f0 <printf@plt>
  400436:       be 04 00 00 00          mov    $0x4,%esi
  40043b:       bf 2c 06 40 00          mov    $0x40062c,%edi
  400440:       31 c0                   xor    %eax,%eax
  400442:       e8 a9 ff ff ff          callq  4003f0 <printf@plt>

绝对相同的汇编代码,因此 - 性能和内存使用完全相同。

编辑:正如达蒙在评论中所说的那样,可能会出现一些诸如复杂的非文字之类的极端情况,但这有点超出了问题。

答案 1 :(得分:3)

当用作常量表达式时,性能没有差异。如果用作左值,则需要定义static const(内存)并访问(cpu)。