首页 / 更多教程 / c – 类构造函数反汇编
c – 类构造函数反汇编
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – 类构造函数反汇编,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1728字,纯文字阅读大概需要3分钟。
内容图文
在调用构造函数之后有一小部分反汇编,这没有任何意义.这里是,
.text:011A18F0 loc_11A18F0: ; CODE XREF: main+5Bj
.text:011A18F0 mov [ebp+again_obj], 0
.text:011A18FA
.text:011A18FA loc_11A18FA: ; CODE XREF: main+6Ej
.text:011A18FA mov eax, [ebp+again_obj]
.text:011A1900 mov [ebp+var_104], eax
.text:011A1906 mov [ebp+var_4], 0FFFFFFFFh
.text:011A190D mov ecx, [ebp+var_104]
.text:011A1913 mov [ebp+var_14], ecx
.text:011A1916 mov eax, [ebp+var_14]
.text:011A1919 mov [ebp+var_E0], eax
.text:011A191F mov ecx, [ebp+var_E0]
.text:011A1925 mov [ebp+var_EC], ecx
.text:011A192B cmp [ebp+var_EC], 0
.text:011A1932 jz short loc_11A1949
我不明白为什么0FFFFFFFFh被移入var_4,以及为什么很多值被移入和移出变量,这就是它在这里完成的方式.优化已经完成,我在VS2010平台上编译了源代码.
解决方法:
var_4是一个内部变量(我称之为’_state’),它跟踪构造对象的状态,以便在异常发生时展开.你看到的是VC在处理新对象时所做的常见模式.例如.
A* pA1 = new A();
转换为这样的东西:
_state = -1;
...
A *temp_pA1 = operator new(sizeof(A));
_state = 0;
if ( temp_pA1 != NULL )
{
pA1 = A::A(temp_pA1);
}
else
{
pA1 = NULL;
}
_state = -1;
...
[unwind funclet for state == 0]
{
A::~A(temp_pA1);
}
如您所见,在对象的内存块是新的但该对象尚未构建之后,它被设置为某个值(例如0).这样,如果构造函数中发生异常,异常处理程序将自动释放分配的内存.在构造之后它被设置为-1,这大致对应于“自动完成的东西,现在所有的内存管理都在程序员的手中”.
有关更多详细信息,请参阅here(“C异常模型实现”和“带C异常的示例程序”).
内容总结
以上是互联网集市为您收集整理的c – 类构造函数反汇编全部内容,希望文章能够帮你解决c – 类构造函数反汇编所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。