我有以下代码,它们被编译器(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