链接程序和库指南

程序启动

在程序启动时,运行时系统将为主线程创建 TLS。

首先,运行时链接程序以逻辑方式将所有已装入动态库(包括动态可执行文件)的 TLS 模板合并成单个静态模板。在合并的模板中为每个动态库的 TLS 模板指定一个偏移 (tlsoffsetm),如下所示。

tlssizem+1alignm+1 分别是动态库 m 的分配模板的大小和对齐方式。其中,1 <= m <= MM 是已装入动态库的总数。round(offset, align) 函数返回向上舍入为最接近 align 倍数的偏移。TLS 模板正好放置在线程指针 tpt 的前面。根据从 tpt 中减去的数字访问 TLS 数据。

接下来,运行时链接程序将计算启动时为 TLS 分配的总大小 tlssizeS。此大小等于 tlsoffsetM

然后,运行时链接程序构造初始化记录的链接表。此列表中的每条记录都描述一个已装入动态库的 TLS 初始化映像。每条记录都包含以下字段。

线程库使用此信息为初始线程分配存储空间。将初始化此存储空间,并为初始线程创建动态 TLS 向量。