C++笔记
如何在笔记本上使用Type-C接口扩展坞 #生活技巧# #数码产品使用技巧# #3C配件搭配推荐#
下面的程序都是x86程序。32位的程序
如下代码:
#include <iostream>
using namespace std;
void test() {
cout << "Hello World" << endl;
}
int main(int argc, int *argv[]) {
int *p = new int(10);
int **pp = &p;
cout << pp << endl;
test();
getchar();
return 0;
}
先看下Debug版的反汇编:
上面是main函数的,看看test()函数
从中可以看到还是代码还是比较多的,主要是看release版本。Debug版本稍微过一下。
32位机器编译出来程序函数前都是
push ebp
mov ebp, esp
进入函数时要保存ebp的值。进入函数后存esp的值。方便进行堆栈内的寻址,函数返回要恢复ebp的值。
从上面可以看到调用函数一般就是使用call。
看下和二级指针相关的反汇编代码:
lea eax, [p]
mov dword ptr [pp], eax
LEA为数据传输指令,[p]为p地址内的值(因为是指针,这个值也是地址)给eax。
然后使用mov指令把eax里面放的这个地址,以地址的形式放到pp中。
下面是release版本的反汇编:
从这里可以看到test()函数被优化了,并且整个程序都变成十分简洁。Release版本还是比较6。
这里可以看到**pp被优化了,在反汇编中可以看到,他仅仅是操作了指针p。
这里空间没释放,在此补下代码:
#include <iostream>
using namespace std;
void test() {
cout << "Hello World" << endl;
}
int main(int argc, int *argv[]) {
int *p = new int(10);
int **pp = &p;
cout << pp << endl;
test();
getchar();
delete p;
return 0;
}
网址:C++笔记 https://www.yuejiaxmz.com/news/view/122874
相关内容
笔记印象笔记
理财笔记:什么是理财?
[笔记本电脑] 如何清洁笔记本电脑
健身笔记
笔记本电脑壁纸尺寸? 笔记本电脑壁纸布置
笔记本如何保养
笔记本电脑的使用方法
win10 C盘超过50G?教你如何对C盘瘦身!
《养花》读书笔记