C++随笔1

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文件在开发过程中起到了指导编译器生成与动态链接库相关代码的作用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值