在哪里查找GCC实现定义行为的实现?

时间:2014-02-04 15:49:42

标签: c++ gcc g++ bit-fields

由于C ++标准在很多方面都非常模糊,我想从不同的编译器中查找具体的实现。目前,我想知道GCC如何分配和对齐位字段。

对于MS Visual C ++编译器,它非常简单:用户手册中有一个关于位字段的nice page,它解释了所有开放分配/对齐问题,甚至还有数字和示例。

我只想为GCC提供相同的信息,但似乎更复杂。 GCC手册中有page,其中只有“由ABI确定”。然后我们有一些关于ABI policy and guidelines的信息,其中包含指向Github上名为Itanium C++ ABI的文档的链接。现在,在本文档中,我们可以找到以下内容:“根据底层C psABI的要求分配位域”。这就是我被困住了。搜索C psABI时,我找不到有用的网站。

有人可以请我指出GCC实现位字段的网站吗?它不能那么复杂,不是吗?为什么GCC的文档往往比微软的文档复杂得多?我使用了错误的资源吗?

2 个答案:

答案 0 :(得分:2)

这就是GCC(运行在许多不同的机器和操作系统上,每个都有自己的关于如何做某事的惯例,平台的ABI)和MS C之间的区别,它只在一个平台上运行(基本上)。但这还不是全部,还有其他领域标准没有规定要做什么,以便给编译器编写者留有余地。如果平台也没有强制要求,编译器编写者可以随意选择。而且选择甚至可能在一个版本的编译器中随机地改变到同一平台上的下一个版本。编译器应该记录它的选择,但对于像GCC一样覆盖如此多平台的野兽来说,找到它可能是一项艰巨的任务。

答案 1 :(得分:0)

G ++在其手册的§4.9中对此进行了记录。另一方面, 文档并没有真正的帮助,因为它说 它是“由ABI决定的”;换句话说,g ++会做任何事情 平台的二进制ABI需要。因此,在Windows下, 它将完全按照Visual C ++的功能,在Solaris下完成 Sun CC会做什么,而在Linux下,g ++会做什么。如果是的话 后者有些循环...... C的ABI通常是 由系统定义,而不是编译器;编译器 符合。我不知道在哪里可以找到这些信息 Linux操作系统。 (同一处理器上ABI的差异有 一些芯片在过去创造了这么多问题 制造商从一开始就定义了ABI。这倾向于 仅适用于最近的架构。)

至于海湾合作委员会的文件比这更复杂 微软,我没有找到。两者都不是特别的 完成,经常留下一些最重要的问题,比如 线程,未指定。