我目前正在从另一个平台移植一些代码,而新平台上的bool是1字节大小的。这会破坏我们的加载代码,因为值存储为32位值。此外,速度是我们平台上的一个关键问题,我们希望使用32位bool,因为处理器本身以32位运行,并且需要额外的操作来比较非32位bool。
有没有办法强制gcc使用32位bool而不是8位bool?
答案 0 :(得分:6)
将#define BOOL_TYPE_SIZE 4
添加到gcc/config/i386/i386.h
并重新编译gcc;)
答案 1 :(得分:3)
bool的大小是实现定义的(5.3.3),并且gcc似乎没有提供在运行时配置它的选项。
希望您的实现定义代码是孤立的。如果是这样,请将bool
更改为int
,或更改加载代码以处理sizeof()== 1而不是4。
(或者,对于疯狂的,改变gcc将bool视为4字节类型。)
编辑:Paul Tomblin关于使用#define
的建议可能不合法[see here],但它至少在gcc 4.1.2下有效。 [Link]但是,如果你没有点击bool
的每次使用,那么大小不匹配几乎肯定会让你感到厌烦。
答案 2 :(得分:2)
#define bool int
答案 3 :(得分:1)
您可以创建自己的内部使用int32_t
的类,但行为类似于bool
。它确实意味着你必须重命名你特别想要使用该类型的字段,这是更多的工作,但提供更好的控制和隔离,你仍然可以在其他地方使用真正的bool
。我个人更喜欢任何#define hackery,它可能会出乎意料地咬人。我还要注意不要假设32位int
将比单个字节快得多...其他因素如流水线,内存延迟,高速缓存大小等可能会使差异无关紧要甚至使32位int
速度较慢,因此您可能希望使用代表性数据处理在系统中对其进行基准测试。
答案 4 :(得分:1)
您需要将内部数据结构与存储/加载代码分开。只需将bool存储在平台的本机bool
类型的内部数据结构中,并在读取/写入数据时从/向存储的一个字节进行适当的转换。