stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Farid Zaripov" <Farid_Zari...@epam.com>
Subject RE: [PATCH] STDCXX-77
Date Wed, 29 Aug 2007 07:38:13 GMT
> -----Original Message-----
> From: Martin Sebor [mailto:sebor@roguewave.com] 
> Sent: Tuesday, August 28, 2007 10:29 PM
> To: stdcxx-dev@incubator.apache.org
> Subject: Re: [PATCH] STDCXX-77
> 
> Farid Zaripov wrote:
> >> -----Original Message-----
> >> From: Martin Sebor [mailto:msebor@gmail.com] On Behalf Of Martin 
> >> Sebor
> >> Sent: Tuesday, August 28, 2007 7:11 PM
> >> To: stdcxx-dev@incubator.apache.org
> >> Subject: Re: [PATCH] STDCXX-77
> >>
> >> I have one concern with the introduction of dynamic initialization 
> >> and the pragma into the library. First, our
> >> (undocumented) design goal is to avoid requiring dynamic 
> >> initialization in the library.
> >> I.e., there should be no code in the library that runs at startup.
> >> The rationale for it is efficiency and avoiding user code 
> issues due 
> >> to initialization dependencies. Since other libraries may use the 
> >> same pragma, they will be subject to initialization 
> dependencies that 
> >> we try to avoid.
> >>
> >> Unless there is a way to avoid the dynamic initialization 
> or defer it 
> >> until runtime (i.e., initialize the handler lazily)
> > 
> >   We need initialize the handler before first operator 
> new() call (or 
> > from first oprator new() call), but I have not see the possible way 
> > for this.
> 
> I wonder if defining DllMain() and setting the handler there, 
> for DLLs only, would deal with the initialization dependency 
> issue, albeit at the cost of a (small) runtime hit.

  Setting handler from DllMain() is the same as the solution, provided
in my patch,
because of global objects are constructed from DllMain() (exactly
function name
is DllMainCRTStartup()). The #pragma init_seg(dll) only tells, that
objects in
current .cpp file will be constructed before objects from modules with
#pragma init_seg(user), and ordinary global objects (but after the
objects
from modules with #pragma init_seg(compiler)). The MSVC initializes CRT
global
objects using #pragma init_seg(compiler).

Farid.

Mime
View raw message