Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数调用约定_C++_Visual Studio 2012_Calling Convention - Fatal编程技术网

C++ 函数调用约定

C++ 函数调用约定,c++,visual-studio-2012,calling-convention,C++,Visual Studio 2012,Calling Convention,我读了一些关于 __crlcall, __stdcall, __fastcall, __vectorcall and __thiscall 呼叫转换。我的问题是,什么时候使用它们中的一个是好的,使用它们的优点(或缺点)是什么。我甚至应该使用它们吗?通常用于使函数调用遵守 具有不同架构(gpu)的示例:当调用低级例程(设备功能)时,您必须遵守其特定的ABI,例如,您需要确保每个大于1字节的加载都在与访问大小的倍数对齐的地址上执行(即,如果需要访问4字节整数,则该地址需要对齐4字节) 你不能在C+

我读了一些关于

__crlcall, __stdcall, __fastcall, __vectorcall and __thiscall
呼叫转换。我的问题是,什么时候使用它们中的一个是好的,使用它们的优点(或缺点)是什么。我甚至应该使用它们吗?

通常用于使函数调用遵守

具有不同架构(gpu)的示例:当调用低级例程(设备功能)时,您必须遵守其特定的ABI,例如,您需要确保每个大于1字节的加载都在与访问大小的倍数对齐的地址上执行(即,如果需要访问4字节整数,则该地址需要对齐4字节)

<>你不能在C++中指定寄存器是如何分配/部署的,以及其他低级的细节(或者你可能会用编译器特定的扩展来调整你的代码是一件痛苦的事):这就是编译器调用约定的开始。 关于何时以及是否应该使用它们:如果您不知道自己在做什么,最好根本不要使用它们。在x86体系结构上不匹配调用约定(例如,堆栈帧)仍然可以工作(只是函数调用期间的传递方式不同)但一般来说,如果幸运的话使用了错误的调用约定,那么可能会失去一些性能(并使代码变得不那么可移植)…如果不幸的话:崩溃!根据体系结构,后者的可能性会越来越大


太长了,读不下去了。请不要用C++或C++代码。不要用它们来“让代码更漂亮”。< /P>我希望你在MSDN上检查一下。可能是你不清楚的副本。请详细说明。