tag picard musicbrainz mac kid3 español editar easytag linux multithreading gcc thread-local-storage

linux - mac - musicbrainz picard español



Implementación de almacenamiento local de hilos de Linux (1)

Es un poco complicado ( este documento lo explica con gran detalle), pero básicamente no lo es. En su lugar, el compilador coloca una sección .tdata especial en el ejecutable, que contiene todas las variables locales de subproceso. En el tiempo de ejecución, se crea una nueva sección de datos para cada hilo con una copia de los datos en la sección (solo lectura) .tdata, y cuando los hilos se cambian en tiempo de ejecución, la sección también se cambia automáticamente.

El resultado final es que las variables __thread son tan rápidas como las variables regulares, y tampoco ocupan espacio de pila adicional.

__thread Foo foo;

¿Cómo se resuelve realmente "foo"? ¿El compilador reemplaza silenciosamente cada instancia de "foo" con una llamada de función? Se almacena "foo" en algún lugar en relación con la parte inferior de la pila, y el compilador almacena esto como "hey, para cada hilo, tenga este espacio cerca de la parte inferior de la pila, y foo se almacena como ''desplazamiento x desde la parte inferior de la pila'' "?