C ++构造函数编译

时间:2013-11-17 00:53:02

标签: c++ decompiling

我有编译构造函数的问题,当我在VC6上编译程序时,我的构造函数有内存分配(sub esp,X),但是当我在VC9上编译时,我的构造函数没有它。

谁知道哪里有问题? 我认为在项目设置中存在问题,但我不知道。

VC6(Visual Studio 6 + SP3):

VC6 assembly

VC9(Visual Studio 2008 + SP1):

VC9 assembly

类别:

class MyClass
{
public:
            MyClass();
    virtual ~MyClass();
    // ----
    BOOL    Function1(LPSTR Arg1);
    BOOL    Function2(LPSTR Arg1);
    BOOL    Function3(LPSTR Arg1);
    // ----
private:
    char    Member1[1000][20];
    int     Member2;
};

代码:

MyClass::MyClass()
{
    this->Member2 = 0;
}

MyClass::~MyClass()
{

}

VC6和VC9上的代码相同

P.S: 当需要编译相同的结果时,在一个代码的不同编译中出现问题。

P.S.(2): @greatwolf - 我很确定VC6中的问题,项目设置中的问题,但我不知道它的选项。 目标 - 100%相同的汇编代码(字节到字节)。 在VC6上进行项目并在调试模式下在VC9上进行项目,但显然有不同的选项。

1 个答案:

答案 0 :(得分:1)

上面的反汇编看起来完全没有优化。您看到的额外堆栈分配恰好恰好是VC6在未经优化的构建中生成的样板代码。

我建议将其构建为释放并再次检查拆卸。您可以放入一个内联汇编断点,以便在调试器中更容易找到它:

MyClass::MyClass()
{
  __asm { int 3 }
  this->Member2 = 0;
}
相关问题