gpt4 book ai didi

c++ - 为什么在堆栈和堆上创建变量会产生相同的汇编代码?

转载 作者:行者123 更新时间:2023-12-01 15:05:20 24 4
gpt4 key购买 nike

我创建了一个示例代码,因为我正试图将自己组装起来。
我在堆栈上声明并初始化一个整数,并且对堆上的整数也执行相同的操作。
当查看汇编代码时,它们两个都产生非常相似的代码:

mov dword ptr [ebp-8],0     ; this is on the stack
mov dword ptr [ebp-14h],0 ; this is on the stack

mov eax,dword ptr [ebp-20h] ; this is on the heap
mov dword ptr [eax],0 ; this is on the heap

您能否说明一下我所忽略的内容?

拆卸的相关部分位于以下位置:
    int x = 0;
00111848 mov dword ptr [ebp-8],0
int y = 0;
0011184F mov dword ptr [ebp-14h],0
int* z = new int;
00111856 push 4
00111858 call 00111325
0011185D add esp,4
00111860 mov dword ptr [ebp+FFFFFF14h],eax
00111866 mov eax,dword ptr [ebp+FFFFFF14h]
0011186C mov dword ptr [ebp-20h],eax
*z = 0;
0011186F mov eax,dword ptr [ebp-20h]
00111872 mov dword ptr [eax],0

最佳答案


int y = ....;


int* z = ....;

创建一个自动变量(即在堆栈上)。一个是整数,另一个是指针。

首先用0初始化,另一个用 new int初始化。这将创建动态对象,并导致对内存分配函数 call 00111325的调用。

关于c++ - 为什么在堆栈和堆上创建变量会产生相同的汇编代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59868192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com