dec*_*iar 18 c++ compiler-construction gcc g++ c++11
给出以下C++代码:
struct vertex_type {
float x, y, z;
//vertex_type() {}
//vertex_type(float x, float y, float z) : x(x), y(y), z(z) {}
};
typedef struct {
vertex_type vertex[10000];
} obj_type;
obj_type cube = {
{
{-1, -1, -1},
{1, -1, -1},
{-1, 1, -1},
{1, 1, -1},
{-1, -1, 1},
{1, -1, 1},
{-1, 1, 1},
{1, 1, 1}
}
};
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我将(当前已注释掉的)构造函数添加到vertex_type
结构中时,编译时间突然增加10-15秒.难倒,我看了gcc(使用-S
)生成的程序集,发现代码大小比以前大几百倍.
...
movl $0x3f800000, cube+84(%rip)
movl $0x3f800000, cube+88(%rip)
movl $0x3f800000, cube+92(%rip)
movl $0x00000000, cube+96(%rip)
...
movl $0x00000000, cube+119996(%rip)
...
Run Code Online (Sandbox Code Playgroud)
通过省略构造函数定义,生成的程序集完全不同.
.globl cube
.data
.align 32
.type cube, @object
.size cube, 120
cube:
.long 3212836864
.long 3212836864
.long 3212836864
.long 1065353216
.long 3212836864
.long 3212836864
.long 3212836864
.long 1065353216
.long 3212836864
.long 1065353216
.long 1065353216
.long 3212836864
.long 3212836864
.long 3212836864
.long 1065353216
.long 1065353216
.long 3212836864
.long 1065353216
.long 3212836864
.long 1065353216
.long 1065353216
.long 1065353216
.long 1065353216
.long 1065353216
.zero 24
.text
Run Code Online (Sandbox Code Playgroud)
显然,编译器生成的代码存在显着差异.这是为什么?另外,为什么gcc在一种情况下归零所有元素而不是另一种情况?
编辑:
我使用以下编译器标志:-std=c++0x
与g ++ 4.5.2.
归档时间: |
|
查看次数: |
911 次 |
最近记录: |