PRB: A Process Can Map 64 (or Less) Statically-linked CRT DLLs (193462)
The information in this article applies to:
- Microsoft Win32 Application Programming Interface (API), when used with:
- the operating system: Microsoft Windows 95
- the operating system: Microsoft Windows 98
- the operating system: Microsoft Windows NT 4.0
- the operating system: Microsoft Windows Millennium Edition
This article was previously published under Q193462 SYMPTOMS
An attempt to load a statically-linked CRT-dependent DLL when all 64 of the
TLS slots are already in use fails with the following error code:
1114 -- ERROR_DLL_INIT_FAILED.
A process running on Microoft Windows 95 or Microsoft Windows NT 4.0 can only map 64 (or less) statically-linked C run-time (CRT) dependent DLLs. On Microsoft Windows 98 and Microsoft Windows Millennium Edition (Me), a process can map up to 80 such DLLs.
A statically-linked CRT-dependent DLL is one in which the CRT library is fully compiled into the DLL.
CAUSE
The CRT library makes use of thread-local storage (TLS). Each time a
statically-linked CRT-dependent DLL is mapped into a process, the CRT is
initialized. During this initialization, a TLS slot is allocated. There are
only TLS_MINIMUM_AVAILABLE slots available to each process. This constant
is guaranteed to be at least 64 on all Win32 platforms.
RESOLUTION
If you have code-control over the DLLs, dynamically link them with the CRT
library. This provides access to all of the CRT functions, without building
them directly into the executable. The DLL version of the CRT is only
initialized once per process.
Using the Microsoft Visual C++ compiler, you can dynamically link your
project with the CRT library by compiling it as a Multithreaded DLL. You
can do this by including the /MD compiler switch.
If no CRT functions are used within a DLL, you can include the linker
switches /NODEFAULTLIB and /ENTRY:DllMain to bypass the CRT initialization
code.
STATUS
This behavior is by design.
REFERENCESFor additional information, click the article number below
to view the article in the Microsoft Knowledge Base:
94248 HOWTO: Use the C Run-Time
94804 INFO: Thread Local Storage Overview
Modification Type: | Minor | Last Reviewed: | 9/27/2004 |
---|
Keywords: | kbDLL kbKernBase kbprb kbThread KB193462 |
---|
|