草庐IT

fastcall

全部标签

c++ - ILINK32 错误 : Unresolved external '__fastcall System::TObject::NewInstance(System::TMetaClass *)' referenced from XXX. obj 的原因?

我从C++Builder2009的链接器中收到以下错误Unresolvedexternal'__fastcallSystem::TObject::NewInstance(System::TMetaClass*)'referencedfromXXX.obj?我们有一组Delphi文件(.pas)和一组C++Builder文件(.hpp和.obj),其中是从这些.pas文件生成的。一组文件被复制到另一台机器上。两台机器都安装了完全相同的C++Builder2009版本和相同的更新(最新:3+4)。当我在另一台机器上的C++Builder中创建一个空的VCL应用程序并将此集合中的一个obj文

c++ - 何时使用 `__fastcall` 调用约定

我们有很多用C++编写的基于VCL的应用程序。所有VCL方法(在__published类修饰符下)都需要__fastcall调用约定。但是,无论出于何种原因,开发人员一直在将__fastcall添加到其他private、protected或public的非VCL函数。基于thisarticle,这对我来说毫无意义,因为它不必要地使代码复杂化,甚至可能会影响性能(虽然可能可以忽略不计)。尽管如此,在建议我们在某些地方删除它之后,我被告知我们一直都是这样做的,所以要保持一致,这只是一个风格问题。我认为如果没有必要,它实际上会让人们感到困惑,所以这是不好的做法。我的问题是,什么时候使用__f

c# - __c# 中的 fastcall 约定

考虑到:MicrosoftSpecificThe__fastcallcallingconventionspecifiesthatargumentstofunctionsaretobepassedinregisters,whenpossible.Thefollowinglistshowstheimplementationofthiscallingconvention.寄存器中的读/写时间比堆栈中的读/写时间快得多,我们在C#中是否有任何__fastcall等效项? 最佳答案 不是直接的,C#主要使用等同于MSVC++的__stdcal

c++ - 使用调用约定 fastcall 的任何实际用例?

您有使用调用约定fastcall的实际用例吗?谢谢。 最佳答案 __fastcall尝试在CPU寄存器而不是堆栈中传递函数参数(如果可能),这样速度更快。这是一个MSDN文章的链接,该文章解释了__fastcall调用约定:http://msdn.microsoft.com/en-us/library/6xa169sk(VS.71).aspxThefirsttwoDWORDorsmallerargumentsarepassedinECXandEDXregisters;allotherargumentsarepassedrightto

【文档翻译】__cdecl/__stdcall/__fastcall?解开神秘的调用约定!

本文档译自www.codeproject.com的文章"CallingConventionsDemystified",作者NemanjaTrifunovic,原文参见此处引言-Introduction在学习Windows编程的漫长、艰难而美妙的旅途中,你可能会对函数声明前出现的奇怪说明符感到好奇,比如__cdecl、__stdcall、__fastcall、WINAPI等等。在阅读过MSDN或其他参考资料之后,你可能知道了这些说明符是用来为函数指定一种叫“调用约定”的东西。在这篇文章中,我会使用VisualC++来向你解释不同的调用约定。我要强调的是,上面提到的说明符是微软特有的,如果你想编写

c - 为什么我不应该使用 __fastcall 而不是标准的 __cdecl?

我听一些人说__fastcall比__cdecl和__stdcall快,因为它把两个参数放在寄存器中,而不是一个其他电话;但是,另一方面,这不是C中使用的标准。我想知道是什么让__fastcall不像C中的标准那样令人讨厌,以及我什么时候会在我的代码中使用它。 最佳答案 x86平台的不同寻常之处在于它没有定义全局ABI和调用约定。Win32/x86可以,它在stdcall上标准化。调用约定之间存在各种权衡——将参数放在寄存器中速度更快,但它会强制调用者溢出之前使用这些寄存器的任何内容。因此很难预测哪个性能更好。重要的是要有一个统一的

c++ - 当我真的不关心调用约定时,我是否应该更喜欢 "default"调用约定而不是 __fastcall?

我们有一个庞大的C++代码库,其中包含大量COM对象。暴露给COM的每个函数都必须有__stdcall调用约定(通常是STDMETHODCALLTYPE宏),因此我们有很多标记为STDMETHODCALLTYPE的函数。现在我看到一个函数不是通过COM直接调用的,而是仅从我们的C++代码中调用的,并且该函数的签名中也有STDMETHODCALLTYPE宏。我完全确定宏在那里毫无用处-从未发生过通过COM调用该函数的情况。我是否应该删除__stdcall以便它成为“默认”调用约定函数?我如何做出这样的决定? 最佳答案 我的方法是对内部

c++ - fastcall真的更快吗?

fastcall调用约定真的比cdecl等其他调用约定快吗?是否有任何基准可以显示调用约定如何影响性能? 最佳答案 这取决于平台。例如,对于XenonPowerPC,它可能是一个数量级的差异,因为在堆栈上传递数据时会出现加载命中存储问题。我凭经验将cdecl函数的开销定为大约45个周期,而fastcall的开销约为4个。对于无序的x86(Intel和AMD),影响可能要小得多,因为无论如何寄存器都被隐藏和重命名。答案确实是您需要在您关心的特定平台上自行对其进行基准测试。 关于c++-fa