C++笔记

发布时间:2024-11-18 17:38

如何在笔记本上使用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盘瘦身!
《养花》读书笔记

随便看看