编译器如何能够优化内部命名空间中的类方法

时间:2017-12-20 14:08:36

标签: c++ gcc optimization g++

我有以下代码,它们被编译器(g ++ - 7)

完全优化
$cat test.cpp
#include<iostream>
namespace {
class A {
public:
  void method();
  static void method1();
};

void A::method() {
  std::cout << "method";
}

void A::method1() {
  std::cout << "method1";
}

}

__attribute__((noinline))
A* foo() {
  A *a = new A;
  a->method();
  return a;
}

汇编代码没有任何功能。我很困惑因为函数foo返回一个指向A的指针,所以编译器应该知道A转义了这个转换单元,或者内部命名空间不允许这样做?

g++-7 -O3 -S -o - test.cpp
LECIE1:
LSFDE1:
    .set L$set$1,LEFDE1-LASFDE1
    .long L$set$1
LASFDE1:
    .long   LASFDE1-EH_frame1
    .quad   LFB2026-.
    .set L$set$2,LFE2026-LFB2026
    .quad L$set$2
    .byte   0
    .byte   0x4
    .set L$set$3,LCFI0-LFB2026
    .long L$set$3
    .byte   0xe
    .byte   0x10
    .byte   0x4
    .set L$set$4,LCFI1-LCFI0
    .long L$set$4
    .byte   0xe
    .byte   0x8
    .align 3
LEFDE1:
    .mod_init_func
    .align 3
    .quad   __GLOBAL__sub_I_test.cpp
    .constructor
    .destructor
    .align 1
    .subsections_via_symbols

0 个答案:

没有答案