【发布时间】:2014-12-28 08:11:48
【问题描述】:
所以我有以下课程:
#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)。又名 - def1 -
#define MY_MACRO(X) SINGLETON->Run(X)。又名 - def2
MY_MACRO 宏在我的整个解决方案中使用了大约 2000 次。
看来我定义MY_MACRO 的方式对我的可执行文件大小有重大影响。
def2 生成比 def1 大得多的可执行文件(增加 120KB)。
问题
- 谁能解释为什么宏定义中的这种简单差异会改变可原谅的大小?
- 是否有定义
MY_MACRO以最小化可执行文件大小的最佳方法?
【问题讨论】:
-
60 字节/出现?这并不多。这是一个优化的构建吗?
-
是的。优化代码以最小化大小。无论哪种方式,在这两种情况下编译代码都是相同的。唯一的区别是宏定义。