首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

请教关于C语言形参和实参存储单元的问题?

首先我们限定一下问题,只限于cdecl的调用约定,函数没有被编译器做inline的优化(C++才有inline,但是C编译器也可能自己把函数调用优化掉)。...stdcall除了返回时自动清理堆栈以外,与cdecl在使用参数上区别不大。thiscall调用约定使用寄存器传递this指针参数。...在cdecl的调用约定下,所有参数从右往左入栈,都要占用存储空间。如果返回值大小超过eax范围,还要额外压一个返回值预留空间到堆栈里,然后从堆栈返回,否则从eax返回。...另外x86上gcc for linux和windows也是有差别的。...gcc x64在Linux下则按照SystemV的调用约定: 前六个整数或指针类型使用RDI, RSI, RDX, RCX (Linux内核中使用R10),R8,R9浮点数使用XMM0,XMM1,XMM2

1.2K30

CC++ 反汇编:关于函数调用约定

一般编译器实现调用调用约定无外乎以下这几种: CDECL:C/C++默认的调用约定,调用方平栈,不定参数的函数可以使用,参数通过堆栈传递....System V:类Linux系统默认约定,前八个参数放入(RDI,RSI, RDX, RCX, R8, R9),剩下的参数压栈保存....cdecl 调用者平栈: cdecl是C/C++默认调用约定,该调用方式在函数内不进行任何平衡参数操作,而是在退出函数后对esp执行加4操作,从而实现栈平衡。...stdcall 被调用者平栈: stdcall与cdecl只在参数平衡上有所不同,其余部分都一样,但该约定不定参数函数无法使用。...cdecl调用方式的函数在同一作用域内多次被调用,会在效率上比stdcall高一些,因为它可以使用复写传播优化,而stdcall在函数内平衡栈,无法使用复写传播优化。

58310

python调用dll文件接口

使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件),下面将详细的讲解这个模块(以windows平台为例子),当然我假设你们已经对windows下怎么写一个...(这里强调调用约定是因为,stdcall调用约定和cdecl调用约定声明的导出函数,在使用python加载时使用的加载函数是不同的,后面会有说明)调用约定的导出函数Add。...   dll函数的_stdcall 和 _cdecl, stdcall是被调用者来进行栈的处理, cdecl是调用者进行栈的处理。...cdecl中每个调用者都要嵌入处理的代码,所以代码量会大一些。 但为什么不都用stdcall。...像printf这样的函数,事先不知道需要的栈大小,需要用cdecl来处理 所以需要使用cdecl来调用   2、调用dll中的方法 在1中加载dll的时候会返回一个DLL对象(假设名字叫Objdll

5.3K40
领券