int *pi = new int; 这一句c++代码的汇编汇编结果, 我看不懂。

lumber 2008-10-23 10:05:43
编译器 VC++ 6.0, int *pi = new int; 的汇编代码如下:


int *pi = new int;
0040107E push 4
00401080 call operator new (00401180)
00401085 add esp,4
00401088 mov dword ptr [ebp-80h],eax
0040108B mov eax,dword ptr [ebp-80h]
0040108E mov dword ptr [ebp-4],eax


其中这两个句,看不懂,为什么要这样做?

00401088 mov dword ptr [ebp-80h],eax
0040108B mov eax,dword ptr [ebp-80h]
...全文
191 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
elegant87 2008-10-25
  • 打赏
  • 举报
回复
学习了啊!
zhujiechang 2008-10-25
  • 打赏
  • 举报
回复
应该和debug版本有关,这种代码好像经常见
用户 昵称 2008-10-24
  • 打赏
  • 举报
回复
想不通
大熊猫侯佩 2008-10-24
  • 打赏
  • 举报
回复
你用release生成exe,然后用ollydbg或windbg看看这段代码由没有变化。
realyigo 2008-10-23
  • 打赏
  • 举报
回复
int *pi = new int;应该是
0040107E push 4
00401080 call operator new (00401180)
00401085 add esp,4
00401088 mov dword ptr [ebp-80h],eax
就结束了.

0040108B mov eax,dword ptr [ebp-80h]
0040108E mov dword ptr [ebp-4],eax
感觉应该是其他的语句.
比如dword ptr [ebp-4]=*pi;
zoologist 2008-10-23
  • 打赏
  • 举报
回复
我也见过这样写的啰嗦的语句,我怀疑是编译器在对齐。

不知道有没有高人来解释一下?
MrLliang 2008-10-23
  • 打赏
  • 举报
回复
编译器没优化好,这两句就等于什么都没做 你看不明白?外语一句话翻译过来也有好几种解释的 没什么奇怪的 编译器又不是人知道这两句对于没做
cnzdgs 2008-10-23
  • 打赏
  • 举报
回复
你用Debug配置也可以,只要把项目设置中C/C++里面的优化选项改一下就可以了。
xiaopoy 2008-10-23
  • 打赏
  • 举报
回复
正常
骂win下的程序效率烂不是没原因的

老盖经典糟蹋性能code
为健壮性而自主添加的临时变量
lumber 2008-10-23
  • 打赏
  • 举报
回复
TO cnzdgs:
我用的是debug配置,因为release配置不能设断点

编译器应该不会这么苯吧,还是我疑心太重了。
cnzdgs 2008-10-23
  • 打赏
  • 举报
回复
估计你是用的Debug配置,编译时没有优化。
[ebp-4]是pi的地址。
[ebp-80h]是VC分配的一个临时变量,把new分配的地址先放到这个临时变量里面,然后再取出来,没有实际意义。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧