Windows:在我的应用程序加载之前谁在调用TlsAlloc?

时间:2012-07-03 00:01:30

标签: windows dynamic-memory-allocation thread-local-storage

我有一个使用公平号码(不要问!)的线程本地存储变量的应用程序。它已经可以运行近十年......直到最近的惊喜。

客户有一台运行Windows7(64位)的笔记本电脑......在他的系统上,TLS分配失败。 (我的问题不是这个,但足够接近)。他声称他的系统很标准;他有一个ZoneAlarm,但声称其他一切都是库存;拿一粒盐)。如何找出分配其他TLS插槽的用户或用户(以及有效地从插槽中运行)?

该应用程序是一个控制台独立应用程序,相当普通:开放/读/写文件,一些多线程,几乎没有别的,所以我希望只有基本的Windows DLL才能积极参与。我知道有些DLL(甚至是Windows)可能会为基于线程的活动提供服务,因此会分配自己的TLS插槽,这没关系。但是我并不认为很多东西都是按照任何理智分配的。是否有其他东西可以作为我的应用程序启动(可能是防火墙)的一部分插入我的进程空间?

启动时,典型流程中应分配多少个TLS插槽?需求来自哪里?我可以跟踪TLS调用以查看谁以某种方式分配它们吗?

编辑:2013年1月1日:现在有了一些经验,并且我的工具在启动时报告了TLS需求,我看到如下内容:

  • Win XP 64 8核16 Gb RAM:3个TLS变量忙
  • Windows Vista 32 4 Gb RAM:4个TLS变量忙
  • Win 7 Pro:4核8 Gb RAM:7个TLS变量忙
  • Win 7(法语版):2核,4 GB:至少25个TLS变量忙,有些配置更多

我们正在检查Windows 8,但其TLS需求似乎更高。但究竟是什么导致了两个Windows 7系统之间的巨大差异呢?为什么在我的应用程序开始运行之前是否需要TLS变量(可能是DLL存储线程状态),特别是考虑到在早期版本的Windows中没有必要?

如果有帮助,我们正在运行32位应用程序。

0 个答案:

没有答案