“Use MFC in a Static Library” -> CRT static

本文探讨了在Visual C++中MFC静态链接与CRT之间的兼容性问题,特别是在使用静态库时遇到的问题。讨论了MFC静态链接可能导致与其他动态链接库不兼容的情况,并考虑了动态链接MFC库作为解决方案的可能性。
摘要由CSDN通过智能技术生成
VC “Use MFC in a Static Library” -> CRT static
CRT 动态就不能编译。
原因大概是MFC的静态连接库使用了静态CRT(runtime library)。

一般库的编译都是动态CRT,如wxWidgets库,
看来MFC应该动态连接才能与其它库相容。

MFC动态连接是否会造成目标机器因缺少DLL无法运行?
找了几个机器发现都可以运行。

查看一文:
VC下使用stl如何摆脱MSVCP60.dll?
98以上的系统就自带有MFC42.dll

不过DEBUG版是没有的。

另一问题:CRT动态库是否会缺?
msvcrt.dll可能都有。
msvcp60.dll可能没有!该DLL会用到吗?

所有库都为静态比较放心。
根据你提供的代码,我可以解释一下其中的宏定义的含义: 1. `prev_inuse(p)`:该宏用于判断前一个相邻的内存块是否被使用。通过与 `PREV_INUSE` 进行按位与运算,可以获取到 size 字段中的对应位。如果结果为非零值,则表示前一个内存块被使用,否则未使用。 2. `chunk_is_mmapped(p)`:该宏用于判断当前内存块是否是通过 `mmap()` 函数从操作系统中获取的。通过与 `IS_MMAPPED` 进行按位与运算,可以获取到 size 字段中的对应位。如果结果为非零值,则表示当前内存块是通过 `mmap()` 获取的,否则不是。 3. `chunk_non_main_arena(p)`:该宏用于判断当前内存块是否来自于非主要的堆空间(arena)。通过与 `NON_MAIN_ARENA` 进行按位与运算,可以获取到 size 字段中的对应位。如果结果为非零值,则表示当前内存块来自于非主要的堆空间,否则来自于主要的堆空间。 4. `inuse(p)`:该宏用于判断当前内存块是否被使用。它通过将 size 字段与 `SIZE_BITS` 进行按位与运算,获取到当前内存块的大小,并返回前一个相邻内存块的 inuse 位。 5. `set_inuse(p)`:该宏用于将当前内存块的 inuse 位设置为 1。它通过将 size 字段与 `SIZE_BITS` 进行按位与运算,然后设置前一个相邻内存块的 size 字段的 inuse 位为 1。 6. `clear_inuse(p)`:该宏用于将当前内存块的 inuse 位清除(置为 0)。它通过将 size 字段与 `SIZE_BITS` 进行按位与运算,然后将前一个相邻内存块的 size 字段的 inuse 位清除。 这些宏定义用于在堆管理中对内存块的元数据进行操作和判断,以支持堆的正确分配和释放操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值