|
1
8
它是对32位代码的帕斯卡呼叫约定的一种改编。Pascal是16位操作系统(如OS/2和Windows3)的调用约定。为什么选择帕斯卡是一个有点猜测,即使我当时是一个小小狗,但它是稍微更有效率。当你只需要640 kb的内存时,它就显得很重要了。 大多数win32函数不是真正的stdcall,因为它还规定了导出函数在呈现给链接器之前是如何修饰的。就像虚无的咕哝(int arg)变成了“咕哝@4”。@后面的数字表示激活帧的大小。但大多数win32函数都是在没有任何修饰的情况下导出的。可能是为了给程序员一个使getProcAddress()工作的战斗机会。我认为修饰的目的是帮助链接器检测声明的API函数签名和实际的API函数签名之间的不匹配。传递的参数数量不匹配是自动的kaboom,因为被调用方将从堆栈中弹出或多或少的参数,然后传递。也很难诊断。stdcall的一个弱点,cdecl约定没有这个问题。 内部调用是stdcall、cdecl和thiscall之间的混合包。虽然单步执行的Windows代码不是我喜欢做的事情,但不能说我检测到了模式。 |
|
|
2
4
用stdcall编译的代码明显小于用cdecl编译的代码(可选)。在作出决定时,较小的代码就是更快的代码。 |
|
0___________ · 我可以在整个程序生命周期内保持句柄打开吗 2 年前 |