在 class 定义中声明类型(枚举、结构等)会增加代码大小
Declaring a type (enum, struct etc.) in class definition increase code size
我正在使用 armcc 编译器开发一些嵌入式软件。出于调试目的,使用 -O0 标志将优化保持在最低限度。为了提高代码的清晰度,我 将一些枚举和结构定义移到了具有 public 访问权限的 class 中。
来自这里:
enum A{
a,
b,
c,
d
};
struct C{
int q;
int w;
int e;
};
class myClass{
....
};
为此:
class myClass{
public:
enum A{
a,
b,
c,
d
};
struct C{
int q;
int w;
int e;
};
....
};
并通过 myClass 接触他们;
myClass::C new_struct;
new_struct.q= myClass::a;
但令我惊讶的是,即使代码没有其他差异,代码大小也增加了 600 字节。我假设这是由用直接值替换枚举的编译器优化(即使在 -O0 时有一些优化处于活动状态)引起的,但对此不确定。什么可能导致代码大小增加(或者阻止优化,如果是这种情况)?
C++ 名称修改将与在 class 中声明的结构和枚举不同。
例如,如果您的 class 在参数列表中有带有结构 C 的方法,就会发生这种情况。
使用 gcc 的快速测试表明方法:
void func( struct C *) ;
当在 class 中声明结构时将被称为 _ZN7myClass4funcEPNS_1CE
,如果结构在 class.
之外声明则将被称为 _ZN7myClass4funcEP1C
我没有 armcc 来测试,但我相信它的行为是一样的。
For both builds there are debug data embedded into elf.
图像中包含的调试符号 table 包含有关程序中定义的每个项目的信息。当你把enum
和struct
移到[=24=里面时,enum
和struct
的元素相关的名称会变大:A::a
变为 myClass::A::a
,A::b
变为 myClass::A::b
,依此类推。所有这些较长的字符串在图像文件中占用额外的 space,使其变大。
Stripping the debug symbols 应该使两个代码生成相同大小的图像。
我正在使用 armcc 编译器开发一些嵌入式软件。出于调试目的,使用 -O0 标志将优化保持在最低限度。为了提高代码的清晰度,我 将一些枚举和结构定义移到了具有 public 访问权限的 class 中。
来自这里:
enum A{
a,
b,
c,
d
};
struct C{
int q;
int w;
int e;
};
class myClass{
....
};
为此:
class myClass{
public:
enum A{
a,
b,
c,
d
};
struct C{
int q;
int w;
int e;
};
....
};
并通过 myClass 接触他们;
myClass::C new_struct;
new_struct.q= myClass::a;
但令我惊讶的是,即使代码没有其他差异,代码大小也增加了 600 字节。我假设这是由用直接值替换枚举的编译器优化(即使在 -O0 时有一些优化处于活动状态)引起的,但对此不确定。什么可能导致代码大小增加(或者阻止优化,如果是这种情况)?
C++ 名称修改将与在 class 中声明的结构和枚举不同。
例如,如果您的 class 在参数列表中有带有结构 C 的方法,就会发生这种情况。
使用 gcc 的快速测试表明方法:
void func( struct C *) ;
当在 class 中声明结构时将被称为 _ZN7myClass4funcEPNS_1CE
,如果结构在 class.
之外声明则将被称为 _ZN7myClass4funcEP1C
我没有 armcc 来测试,但我相信它的行为是一样的。
For both builds there are debug data embedded into elf.
图像中包含的调试符号 table 包含有关程序中定义的每个项目的信息。当你把enum
和struct
移到[=24=里面时,enum
和struct
的元素相关的名称会变大:A::a
变为 myClass::A::a
,A::b
变为 myClass::A::b
,依此类推。所有这些较长的字符串在图像文件中占用额外的 space,使其变大。
Stripping the debug symbols 应该使两个代码生成相同大小的图像。