mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-05 23:19:31 +03:00
Prefer MSVC 'data section magic' over C++ static initialization
This commit is contained in:
parent
164b3a9667
commit
d24262f477
1 changed files with 15 additions and 15 deletions
30
src/init.c
30
src/init.c
|
@ -557,20 +557,6 @@ static void mi_process_done(void) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(__cplusplus)
|
|
||||||
// C++: use static initialization to detect process start
|
|
||||||
static bool _mi_process_init(void) {
|
|
||||||
mi_process_load();
|
|
||||||
return (_mi_heap_main.thread_id != 0);
|
|
||||||
}
|
|
||||||
static bool mi_initialized = _mi_process_init();
|
|
||||||
|
|
||||||
#elif defined(__GNUC__) || defined(__clang__)
|
|
||||||
// GCC,Clang: use the constructor attribute
|
|
||||||
static void __attribute__((constructor)) _mi_process_init(void) {
|
|
||||||
mi_process_load();
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
// MSVC: use data section magic for static libraries
|
// MSVC: use data section magic for static libraries
|
||||||
// See <https://www.codeguru.com/cpp/misc/misc/applicationcontrol/article.php/c6945/Running-Code-Before-and-After-Main.htm>
|
// See <https://www.codeguru.com/cpp/misc/misc/applicationcontrol/article.php/c6945/Running-Code-Before-and-After-Main.htm>
|
||||||
|
@ -586,9 +572,23 @@ static void mi_process_done(void) {
|
||||||
__pragma(comment(linker, "/include:" "__mi_msvc_initu"))
|
__pragma(comment(linker, "/include:" "__mi_msvc_initu"))
|
||||||
#endif
|
#endif
|
||||||
#pragma data_seg(".CRT$XIU")
|
#pragma data_seg(".CRT$XIU")
|
||||||
_crt_cb _mi_msvc_initu[] = { &_mi_process_init };
|
extern "C" _crt_cb _mi_msvc_initu[] = { &_mi_process_init };
|
||||||
#pragma data_seg()
|
#pragma data_seg()
|
||||||
|
|
||||||
|
#elif defined(__cplusplus)
|
||||||
|
// C++: use static initialization to detect process start
|
||||||
|
static bool _mi_process_init(void) {
|
||||||
|
mi_process_load();
|
||||||
|
return (_mi_heap_main.thread_id != 0);
|
||||||
|
}
|
||||||
|
static bool mi_initialized = _mi_process_init();
|
||||||
|
|
||||||
|
#elif defined(__GNUC__) || defined(__clang__)
|
||||||
|
// GCC,Clang: use the constructor attribute
|
||||||
|
static void __attribute__((constructor)) _mi_process_init(void) {
|
||||||
|
mi_process_load();
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#pragma message("define a way to call mi_process_load on your platform")
|
#pragma message("define a way to call mi_process_load on your platform")
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue