所以我有以下课程:
#define SINGLETON Singleton::GetInstance()
//#define MY_MACRO(X) Singleton::RunS(X)
//#define MY_MACRO(X) SINGLETON->Run(X)
class Singleton;
using Singleton_ptr = std::shared_ptr < Singleton > ;
class Singleton
{
public:
static Singleton_ptr GetInstance();
static wstring RunS(__in const wstring& strSource) { return SINGLETON->Run(strSource); }
public:
void Run(__in const wstring& strSource);
private:
static Singleton_ptr ms_Instance;
Singleton();
};
您可以看到我有两种不同的方式来定义MY_MACRO
。
#define MY_MACRO(X) Singleton::RunS(X)
。 AKA - def1 #define MY_MACRO(X) SINGLETON->Run(X)
。 AKA - def2 MY_MACRO
宏在我的整个解决方案中使用了~2000次。
我定义MY_MACRO
的方式似乎对我的可执行文件大小有重大影响。
def2 生成更大的可执行文件(增加120KB),然后 def1 。
MY_MACRO
以最小化可执行文件的大小?答案 0 :(得分:2)
使用def2
宏定义,编译器将添加代码以在每个宏调用站点创建和销毁std::shared_ptr < Singleton >
。使用def1
时,std::shared_ptr < Singleton >
仅在Singleton::RunS()
功能代码中创建/销毁。
我有点怀疑这会影响整个尺寸差异,所以我怀疑代码数量增加可能还有其他原因。例如,如果您正在使用GCC进行编译并包含符号,则调试信息将包含在可执行文件中,def2
中的其他函数调用可能会考虑添加到二进制文件中的其他调试信息。