Улучшайте куб.см до GCC-4.5 или выше (через MacPorts или что-то). Операция TLS на mac намного дороже, чем на Linux или другом unix, потому что она эмулируется.
Следующий код:
__thread int foo;
void f() {
++foo;
}
на Linux, он будет переведен на это:
f:
pushl %ebp
movl %esp, %ebp
movl %gs:[email protected], %eax
addl $1, %eax
movl %eax, %gs:[email protected]
popl %ebp
ret
но на макинтош, он будет переведен на это (два вызова функции !!):
_f:
LFB0:
pushq %rbp
LCFI0:
movq %rsp, %rbp
LCFI1:
pushq %rbx
LCFI2:
subq $8, %rsp
LCFI3:
leaq ___emutls_v.foo(%rip), %rdi
call ___emutls_get_address
movl (%rax), %eax
leal 1(%rax), %ebx
leaq ___emutls_v.foo(%rip), %rdi
call ___emutls_get_address
movl %ebx, (%rax)
addq $8, %rsp
popq %rbx
leave
LCFI4:
ret
Согласно Kerrisk в [Linux Programming Programming: Справочник по системному программированию Linux и UNIX] (http://www.amazon.com/dp/159 3272200), вам необходимо GCC 3.3 или выше для локального хранилища потоков ('__thread' для статических и глобальных объявлений). Mac OS X поставляется с GCC 4.2, поэтому похоже, что Apple удалила функциональность (или не вернула ее обратно). Он также требует поддержки ядра (Linux 2.6 и выше). что может объяснить, почему Apple не предоставила его. – jww
Означает ли это, что мы все еще не можем скомпилировать mac os x (10.10) У меня такая же проблема при попытке установить PyMetis (pip install pymetis) и мои отчеты 'gcc -version':' Apple LLVM version 7.0.2 (clang-700.1.81) Цель: x86_64-apple-darwin14.5.0 Модель темы: posix' Тем не менее, я установил gcc v 4.9, используя 'brew install gcc49' – sAguinaga