采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
函数调用时,原先函数中所有的局部量都会被压进栈空间吗?
不是。如果用完就毁的变量没有必要保存,如果需要保存现场以便返回使用的变量可以压栈处理,如果是需要传递的参数也可以采用寄存器传递。
例如这段代码: int vsimpleFunc(int a) { int value = a; value += 0x33; return value; } int main() { int tmp = 0x22; int tmp2 = 0; int tmp3 = 0x99; tmp2 = vsimpleFunc(tmp); tmp = tmp3 + 0x11; cout << "tmp = " << tmp << endl; cout << "tmp2 = " << tmp2 << endl; return 0; } 其中的tmp2和tmp3都没见到压入栈空间。 因为我进入vsimpleFunc函数后在VS里手动修改了tmp2,tmp3内存中的值,并没有在调用函数恢复时恢复原先的值。且汇编代码里也没看到相关的压栈操作。所以请教下这个问题。
不知道你的目的是什么。这里为什么要压栈,你也没有传参tmp2和tmp3的操作,一般出现压栈是为了保证在调用其他函数时本地现场不被破坏,你这里没有必要压栈。咋们学习最好有个现实的场景,尽量别钻这种牛角尖,而且我们这里学习汇编的主要目的是更好的理解C++底层的一些运作,了解一些常用的场景就可以了。
我又看了两遍视频,发现是我理解错了。这里的压栈是为了函数值传递,不传递的值是存在于本身函数栈区间中,是不用压栈的。谢谢老师解答?
登录后可查看更多问答,登录/注册
一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维
1.3k 12
1.2k 12
1.4k 10
1.2k 9
1.1k 9