栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

(静态链接的)DLL是否使用与主程序不同的堆?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

(静态链接的)DLL是否使用与主程序不同的堆?

DLL / exes将需要链接到C运行时库的实现。

对于C Windows运行时库,如果希望链接到以下内容,则可以选择指定:

  1. 单线程C运行时库(现已停止对单线程库的支持)
  2. 多线程DLL /多线程调试DLL
  3. 静态运行时库。
  4. 更多(您可以检查链接)

它们中的每一个都将引用一个不同的堆,因此不允许您从一个运行时库的堆获得的地址传递给另一个。

现在,它取决于您所讨论的DLL已链接到哪个C运行时库。假设,您正在使用的DLL已链接到静态C运行时库,而您的应用程序代码(包含主函数)已链接到多线程C运行时DLL,那么如果您将指针传递给在DLL到您的主程序,然后尝试将其释放,反之亦然,这可能导致未定义的行为。因此,根本原因是C运行时库。请仔细选择它们。

请在此处和此处找到有关支持的C运行时库的更多信息

来自MSDN的报价:

注意 请勿混合使用静态版本和动态版本的运行时库。
进程中有多个运行时库副本可能会导致问题,因为一个副本中的静态数据不会与另一副本共享。链接器可防止您同时链接一个.exe文件中的静态版本和动态版本,但最终仍可以得到两个(或更多)运行时库副本。例如,与运行时库的动态(DLL)版本链接的.exe文件一起使用时,与运行时库的静态(非DLL)版本链接的动态链接库可能会导致问题。
。(您还应避免在一个过程中混合使用库的调试版本和非调试版本。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/412320.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号