如何强制设置“bool”的大小?海湾合作委员会下

发布于 2024-10-07 19:50:56 字数 183 浏览 5 评论 0原文

我目前正在从另一个平台移植一些代码,新平台上的布尔值是 1 字节大小。这破坏了我们的加载代码,因为这些值存储为 32 位值。此外,速度是我们平台上的一个关键问题,我们希望使用 32 位布尔值,因为处理器本身以 32 位运行,并且需要额外的操作来比较非 32 位布尔值。

有没有办法强制 gcc 使用 32 位布尔值而不是 8 位布尔值?

I'm currently porting some code from another platform and bools on the new platform are 1-byte sized. This is breaking our loading code as the values are stored as 32-bit values. Furthermore, speed is a critical issue on our platform and we would like to use 32-bit bools as the processor runs at 32-bits natively and requires extra operations to compare non 32-bit bools.

Is there a way to force gcc to use 32-bit bools instead of 8-bit bools?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

貪欢 2024-10-14 19:50:56

#define BOOL_TYPE_SIZE 4 添加到 gcc/config/i386/i386.h 并重新编译 gcc ;)

Add #define BOOL_TYPE_SIZE 4 to gcc/config/i386/i386.h and recompile gcc ;)

若无相欠,怎会相见 2024-10-14 19:50:56

bool 的大小是实现定义的(5.3.3),并且 gcc 似乎没有提供在运行时配置它的选项。

希望您的实现定义的代码是隔离的。如果是这样,请将您的 bool 更改为 int ,或更改您的加载代码以处理 sizeof() == 1 而不是 4。

(或者,对于疯狂的人,更改 gcc 将 bool 视为 4 字节类型。)

编辑:Paul Tomblin 使用 #define 的建议可能不合法 [参见此处],但它至少在 gcc 4.1.2 下工作。 [Link] 但是,如果您没有使用 bool 的所有用法尺寸不匹配几乎肯定会咬你。

The size of bool is implementation defined (5.3.3), and gcc doesn't appear to provide an option to configure this at run-time.

Hopefully your implementation-defined code is isolated. If so, change your bools to ints, or change your loading code to deal with sizeof() == 1 instead of 4.

(Or, for the crazy, alter gcc to treat bool as a 4-byte type.)

Edit: Paul Tomblin's suggestion of using #define may not be legal [see here], but it does work under gcc 4.1.2, at least. [Link] However, if you don't hit every usage of bool the size mismatch will almost certainly bite you.

不气馁 2024-10-14 19:50:56
#define bool int
#define bool int
满栀 2024-10-14 19:50:56

您可以创建自己的类,在内部使用 int32_t 但其行为类似于 bool。这确实意味着您必须重命名您特别想要使用该类型的字段,这会增加工作量,但可以提供更好的控制和隔离,并且您仍然可以在其他地方使用真正的 bool 。我个人更喜欢这种方式,而不是任何 #define 黑客行为,因为这可能会在意想不到的地方造成影响。我还警告不要假设 32 位 int 会比单字节更快......其他因素(例如管道、内存延迟、缓存大小等)可能会使差异变得微不足道,甚至使差异变得微不足道。 32 位 int 速度较慢,因此您可能需要在系统中使用代表性数据处理对其进行基准测试。

You could create your own class that uses int32_t internally but behaves like a bool. It does mean you'd have to rename the fields you specifically want to use that type, which is more work but affords better control and isolation, and you can still use real bools elsewhere. I'd personally prefer that to any #define hackery, which might bite somewhere unexpected. I'd also caution against assuming a 32-bit int will be usefully faster than a single byte... other factors like pipelining, memory latencies, cache sizes etc. could render the difference insignificant or even make 32-bit ints slower, so you might want to benchmark it in your system with representatitive data handling.

蔚蓝源自深海 2024-10-14 19:50:56

您需要将内部数据结构与存储/加载代码分开。只需将布尔值存储在平台的本机 bool 类型的内部数据结构中,并在读取/写入数据时从存储的一字节布尔值进行适当的转换即可。

You need to separate your internal data structures from the storage/loading code. Simply store the bools in your internal data structures in your platform's native bool type and do the appropriate conversion from/to the storage's one byte bools when reading/writing the data.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文