improved deallocation fix for Visual C++ Multithreaded non DLL runtime

so that it only has a performance impact on wxString in this configuration


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20756 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Gilles Depeyrot
2003-05-29 14:03:37 +00:00
parent ca5e07c768
commit 8ecf21b7db
2 changed files with 9 additions and 4 deletions

View File

@@ -190,17 +190,19 @@ struct WXDLLEXPORT wxStringData
// lock/unlock // lock/unlock
void Lock() { if ( !IsEmpty() ) nRefs++; } void Lock() { if ( !IsEmpty() ) nRefs++; }
// VC++ will refuse to inline this function but profiling shows that it // VC++ will refuse to inline Unlock but profiling shows that it is wrong
// is wrong
#if defined(__VISUALC__) && (__VISUALC__ >= 1200) #if defined(__VISUALC__) && (__VISUALC__ >= 1200)
__forceinline __forceinline
#endif #endif
void Unlock() { if ( !IsEmpty() && --nRefs == 0) Free(); }
// VC++ free must take place in same DLL as allocation when using non dll // VC++ free must take place in same DLL as allocation when using non dll
// run-time library (e.g. Multithreaded instead of Multithreaded DLL) // run-time library (e.g. Multithreaded instead of Multithreaded DLL)
#if defined(__VISUALC__) && defined(_MT) && !defined(_DLL)
void Unlock() { if ( !IsEmpty() && --nRefs == 0) Free(); }
// we must not inline deallocation since allocation is not inlined // we must not inline deallocation since allocation is not inlined
void Free(); void Free();
#else
void Unlock() { if ( !IsEmpty() && --nRefs == 0) free(); }
#endif
// if we had taken control over string memory (GetWriteBuf), it's // if we had taken control over string memory (GetWriteBuf), it's
// intentionally put in invalid state // intentionally put in invalid state

View File

@@ -164,10 +164,13 @@ wxSTD ostream& operator<<(wxSTD ostream& os, const wxString& str)
// wxStringData class deallocation // wxStringData class deallocation
// =========================================================================== // ===========================================================================
#if defined(__VISUALC__) && defined(_MT) && !defined(_DLL)
# pragma message (__FILE__ ": building with Multithreaded non DLL runtime has a performance impact on wxString!")
void wxStringData::Free() void wxStringData::Free()
{ {
free(this); free(this);
} }
#endif
// =========================================================================== // ===========================================================================
// wxString class core // wxString class core