use*_*080 5 c++ gcc g++ bit-fields
由于C++标准在很多方面都非常模糊,我想从不同的编译器中查找具体的实现.目前,我想知道GCC如何分配和对齐位字段.
对于MS Visual C++编译器,它非常简单:用户手册中有一个关于位字段的精美页面,它解释了所有开放分配/对齐问题,甚至还有数字和示例.
我只想要GCC的相同信息,但似乎更复杂.GCC手册中有一页只是说"由ABI决定".然后我们有一些关于ABI策略和指南的信息,其中包含指向Github上名为Itanium C++ ABI的文档的链接.现在,在本文档中,我们可以找到以下内容:"根据底层C psABI的要求分配位域".这就是我被困住了.搜索C psABI时,我找不到有用的网站.
任何人都可以请我指向GCC的位域实现的网站吗?它不能那么复杂,不是吗?为什么GCC的文档往往比微软的文档复杂得多?我使用了错误的资源吗?
这就是 GCC(它运行在很多很多不同的机器和操作系统上,每个机器和操作系统都有自己的关于如何做某些事情的约定,即平台的 ABI)和 MS C 之间的区别,MS C 只在一个平台上运行(本质上)。但这还不是全部,还有其他领域的标准没有规定要做什么,以便给编译器编写者留有余地。如果平台也没有强制要求,编译器编写者可以随意选择。在同一平台上,选择甚至可能看似随机地从编译器的一个版本更改为下一个版本。编译器应该记录它的选择,但对于像 GCC 这样覆盖如此多平台的野兽来说,找到它可能是一项艰巨的任务。