函数调用约定_vectorcall。
大家好,欢迎回到靠老师的四节magic,这节课来看一看mac to call这种函数调为为adad,vector是微软之间的一种函数条约定,目的是用来优化浮点数相连运算,浮点数的。
在英特尔处理器中有很多浮点数计算器,也就是xm零,一直到可能是xm十五万。传统的第二个约定也是前面学的std库、c d 库、fastcore,thiscore没有选,这个是在自家家里面可能会用的一种,都是通过通用计算器,比如ecx、edx、rcx、rdx、r8、r9等等。
这个是在六十四位下面,这个是在三十二小的这些通用计程器来传递参数,或者用对战来进行参数的传递,对战也就是内存,在调用的时候浮点参数就需要从内存当中去获取,效率就比较低。
刚才讲了fast库好像是可以用浮点数计程器来传递复联数,但是刚才测试了一下没有特效,所以现在来看看micro再走能不能生效,其他的相差无几。到代码当中来看一看,must cool a methodical,在这里下单点直接跑一下。
看一下ebp机子入站,当前还说的机子入站,机子指向新的一个站底,再去分配站内存,计程器入站也就是保护现场,破袭ecx,这里有个pro型ecx,这里有个puffecx,说明这中间是要用c x来做填充,这个先不管。
ecx应该是这个参数,这个参数应该是edx,先保护起来,做了这件事之后再把它剖腹出来,其实这个参数就没有受影响,ecx再出来,把xmm零浮点数计程器里面只装到iaivl三,就装到这个里面去。
其实这个就是第三个参数,所以装进去,把edx计算器里面值装到行车边料里面去,ecx再装到这里面去,这样五个参数是不是都有了?这两个参数是通过战略层的产地的,根据钓鱼约定肯定是已经对应上内存了,下面的这一些就先不管它,这里是局部变量了,做一些加法运算,代码逻辑做了之后把值返回的是整形值,就通过eix来返回,剩下的同样的是恢复现场。
这三个puff对准。上面的这三个push不算,这个push在这里已经pass出来了,然后是回收占内存,零fc,是不是零fc?这是减下播时间,这里是加就恢复了,再去把ap复制给它,在pop ap这两个操作就是这两操作的力操作。
这里有一个read号本ap之后,在read是不是有个八?这个八是不是回收参数占用的战略层?因为是有几个字节,有两个参数,这两个参数是在每一个占四个字节,它是八个字节,对它来回收占内存。
这就是vector跟前面的last比较起来,主要就是这个生效了,这个是用复联术计算器来传的参数,二十个国人还是通过战略出来传递的,对照着理解就会更简单更快。这就是所学的vector库,这种函数叫约定。
在这之前讲的cd库、stt库、fast库,包括现在讲的victor库都是在叉八六平台下面的,下一节课来看一看在叉六十四下面,在这个平台下面用vs变音器来看看它又是怎么样的钓鱼约定。先暂停一下。
本文暂时没有评论,来添加一个吧(●'◡'●)