GCC是什么?

这起源于今天早些时候关于C语言的高贵图书馆和gcc特定黑客问题。 具体来说,使用了这两个声明:

typedef unsigned int dword_t __attribute__((mode(DI)));

在32位系统上

typedef unsigned int dword_t __attribute__((mode(TI)));

在64位系统上。

我假设这是对C语言的扩展,无法达到目前(C99)标准所达到的目标。

所以我的问题很简单:这个假设是否正确? 这些语句对底层内存有什么作用? 我认为结果是我有2*sizeof(uint32_t)用于32位系统中的dword2*sizeof(uint64_t)用于64位系统,我是否正确?


这些允许您显式指定类型的大小,而不依赖于编译器或机器语义,例如'long'或'int'的大小。

他们在这个页面上描述得相当好。

我从该页面引用:

QI:与最小可寻址单元一样宽的整数,通常为8位。

HI:一个整数,是QI模式整数的两倍,通常为16位。

SI:整数,是QI模式整数的四倍,通常为32位。

DI:整数,是QI模式整数的八倍,通常为64位。

SF:浮点值,与SI模式整数一样宽,通常为32位。

DF:浮点值,与DI模式整数一样宽,通常为64位。

所以DI基本上是sizeof(char) * 8

进一步的解释,包括TI模式,可以在这里找到(可能比第一个链接更好,但都供参考)。

所以TI基本上是sizeof(char) * 16 (128位)。


@haelix刚刚阅读这个问题,我也试图理解这个事情。 通过我的阅读:您可以在GCC源代码树中的[gcc / gcc / machmode.def]中找到定义。 对于'标准'它应该是:

    /* Decimal floating point modes.  */ 
DECIMAL_FLOAT_MODE (SD, 4, decimal_single_format);

和'DECIMAL_FLOAT_MODE'说:

     DECIMAL_FLOAT_MODE (MODE, BYTESIZE, FORMAT);
declares MODE to be of class DECIMAL_FLOAT and BYTESIZE bytes
wide.  All of the bits of its representation are significant.
链接地址: http://www.djcxy.com/p/45765.html

上一篇: What does GCC

下一篇: NSMutableArray can not release objects after invoke removeAllObjects