stack_memory Debug下默认用0xcccc cccc填充
heap_memory Debug下默认用0xcdcd cdcd填充
HeapFree() Debug下默认用0xfeee feee填充heap_memory
调用方式:
_cdecl:默认的函数调用约定,也称为C调用约定(cdecl)。在_cdecl调用约定下,函数参数从右至左入栈,由调用方清理栈上的参数。它适用于可变参数函数和函数指针。
_stdcall:又称为标准调用约定(stdcall),在Windows API中广泛使用。在_stdcall调用约定下,函数参数从右至左入栈,由被调用方清理栈上的参数。该约定还会导致函数名被装饰为带有下划线前缀和后缀的名称。此约定确保了参数的正确传递和堆栈的正确清理。
_fastcall:称为快速调用约定(fastcall),在某些编译器中可用。在_fastcall调用约定下,函数的第一个和第二个参数通过寄存器传递,而后续的参数通过栈传递。_fastcall约定可以提高函数调用的性能,但只能用于特定寄存器可用的参数数量。
.dll 和 .lib
在Visual Studio中生成动态链接库(.dll)时,同时生成的.lib文件是用于静态链接的导入库文件。这是因为在开发过程中,存在两种方式使用动态链接库:隐式链接和显式链接。
1.隐式链接:在使用动态链接库时,编译器通过.lib文件进行静态链接,将库中的函数和变量加入到最终生成的可执行文件中。这样,在运行时,可执行文件无需明确地加载和链接.dll文件,而是直接调用静态链接库中的函数和变量。
2.显式链接:如果开发者希望在运行时动态加载.dll文件,并通过函数的地址进行调用,则需要使用显式链接。在这种情况下,需要使用.lib文件来指导编译器生成与动态链接库相关的函数调用。.lib文件中包含了动态链接库中函数的符号信息,用于编译时解析动态链接库中函数的地址。然后在运行时动态加载.dll文件,并通过函数的地址进行调用。
so,生成.dll文件时,生成的.lib文件提供了静态链接的导入库,用于隐式链接和显式链接时的编译和链接操作。.lib文件在开发过程中起到了指导编译器生成与动态链接库相关代码的作用