c++ - 用一个 int 替换多个 bool 并使用位掩码的性能优势?

标签 c++ linux performance optimization bit-manipulation

我有一个 C++ 应用程序,我在其中使用多个 bool 值来检查 IF 语句的条件。使用 cachegrind 我的分支预测错误大约是 4%,所以还不错。但是,我确实需要尝试提高性能。

用一个 int 替换 12x bool 是否值得?我在 64 位 Red Hat 上,我相信 bool 值是使用 4 字节整数表示的。因此我使用的是 48 字节,而不是 12 位。

如果我要使用位掩码,我想我仍然需要存储位模式以访问整个 int 中的特定位。存储这些位模式的需要是否会抵消减少池数量所节省的字节数,从而使这个想法变得毫无意义?

最佳答案

虽然确定答案的唯一方法是尝试一下,但有几个因素可能会影响您的决定。

首先,存储量会减少:您不必“存储位模式以访问整个 int 中的特定位”,因为这些模式将成为程序“烘焙”中的常量进入”二进制代码。

其次,您应该查看标志的使用模式。如果您经常检查多个标志的组合,则可以用单个屏蔽操作替换其中一些检查。

第三,您应该考虑写回数据的方面:使用单独的 bool 值,每次写入都会到达其自己的位置,而带有标志的解决方案将每次写入相同的一两个字节您需要修改标志的时间。另一方面,一次修改多个标志可以在一次写入中完成。

最后,你应该考虑可读性的问题:你的程序在这次改动之后势必会变得更加复杂。与可读性的损失相比,性能的提高可能太小了,因为当硬件在几年内变得更快时,代码将运行得更快,但可读性较差的代码将永远保持较差的可读性。

关于c++ - 用一个 int 替换多个 bool 并使用位掩码的性能优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24861248/

相关文章:

c++ - std::istringstream.good() 比预期多返回 true 一次

linux - VSCode "Open Containing Folder"快捷方式在 Linux Mint 上损坏

java - 当用户连接超过5000时Jboss停止工作

c++ - 与默认 IF 相比,简写 IF 是否会提高效率?

c++ - 如何构造一个由 double 和 ""组成的字符串,然后将其作为 const char* 提供给 cMessage 构造函数?

c++ - 如何配置 Qt - DirectX - Xinput.h

linux - 使用点运行 shell 脚本为什么 "echo $0"打印 -bash

c - linux 驱动程序间通信

java - java在不同硬件上的性能?

c++ - weak_ptr<User_Class> 是非指针类型