GCC中mode属性作用及相关typedef与类型大小的技术咨询
GCC mode属性与相关typedef问题解答
1. GCC中mode属性的作用
mode是GCC的扩展属性,用于指定类型的机器模式——也就是该类型在目标硬件架构上的存储宽度、对齐方式和表示格式。它会覆盖原typedef基础类型的默认属性,让最终定义的类型严格匹配目标架构对应模式的硬件特性,常用于编写跨架构的底层代码,保证类型大小和硬件原生字长/指针宽度一致。
2. 给定typedef的功能
第一组(来自libgcc/emutls.c)
typedef unsigned int word __attribute__((mode(word))); typedef unsigned int pointer __attribute__((mode(pointer)));
word:定义为与目标架构自然字长匹配的无符号整数类型,这里的mode(word)对应架构原生的字宽(比如32位架构就是32位,64位就是64位),和基础类型unsigned int无关——即使基础类型是int,最终类型大小也会被mode(word)覆盖。pointer:定义为与目标架构指针宽度完全一致的无符号整数类型,用于在底层代码中以整数形式操作指针数据,保证大小和指针相同。
第二组(来自libgcc/unwind-generic.h)
typedef unsigned _Unwind_Word __attribute__((__mode__(__unwind_word__))); typedef signed _Unwind_Sword __attribute__((__mode__(__unwind_word__)));
_Unwind_Word和_Unwind_Sword:是为GCC的异常 unwind 机制定义的专用类型,__unwind_word__模式对应架构上适合存储 unwind 相关数据(如返回地址、栈指针值)的宽度,通常和指针/自然字长完全一致,分别是无符号和有符号版本。
3. 不同架构下的类型大小
以下是各类型在不同位宽架构下的字节数(统一对应架构的原生宽度):
- 8位架构:
word=1字节,pointer=1字节,_Unwind_Word=1字节 - 16位架构:
word=2字节,pointer=2字节,_Unwind_Word=2字节 - 32位架构:
word=4字节,pointer=4字节,_Unwind_Word=4字节 - 64位架构:
word=8字节,pointer=8字节,_Unwind_Word=8字节
注:这里的"位架构"指的是CPU的通用寄存器宽度和指针宽度,比如x86是32位,x86_64是64位,ARMv7是32位,ARMv8是64位。
内容的提问来源于stack exchange,提问作者jdx
相关产品推荐
相关产品推荐

