ZHCADC3B February 2019 – October 2023
保护变量是一种单字节字段,存储在 16 位容器的第一个字节中。保护变量的非零值指示初始化已完成。这遵循 IA-64 方案,但容器为 16 位,而不是 64 位。
下面是辅助函数 _ _cxa_guard_acquire 的参考设计,该函数读取保护变量,如果初始化尚未完成就返回 1,否则返回 0:
int __cxa_guard_acquire(unsigned int *guard)
{
char *first_byte = (char *)guard;
return (*first_byte == 0) ? 1 : 0;
}
下面是辅助函数 _ _cxa_guard_release 的参考设计,该函数修改保护对象,指示初始化已完成:
void __cxa_guard_release(unsigned int *guard)
{
char *first_byte = (char *)guard;
*first_byte = 1;
}