相关疑难解决方法(0)

"if([bool] == true)"是否需要比"if([bool])多一步"?

这是一个纯粹迂腐的问题,以满足自己的好奇心.

我倾向于在问题中使用后一种选择(所以if (boolCheck) { ... }:),而同事总是写前者(if (boolCheck == true) { ... }).我总是有点嘲笑他,并且从他第一次开始编程时他总是把它解释为一种旧习惯.

但是我今天刚刚想到,实际写出整个== true部分可能实际上需要一个额外的处理步骤,因为任何带有==运算符的表达式都会被计算为布尔值.这是真的?

换句话说,据我所知,没有 == true行的选项可以松散地描述如下:

  1. 检查X.

使用 == true行的选项更像是:

  1. 如果X为真,则Y为真,否则为假
  2. 检查Y.

我对么?或者也许任何普通的编译器/解释器都会消除这种差异?或者我忽略了什么,而且根本没有什么区别?

显然,在实际观察到的性能方面没有区别.就像我说的,我只是好奇.

编辑:感谢所有实际发布编译结果的人,以说明两种方法之间的步骤是否不同.(看起来,大部分时间,它们都是,虽然只是轻微的.)

我只想重申,我并不是在问什么是"正确的"方法.我知道很多人喜欢一个人而不是另一个人.我也理解,从逻辑上讲,两者是相同的.如果CPU执行的实际操作对于两种方法完全相同,我只是很好奇; 事实证明,在很多时候(显然它取决于语言,编译器等),它们不是.

optimization boolean

28
推荐指数
5
解决办法
3万
查看次数

12
推荐指数
2
解决办法
9723
查看次数

为什么Vulkan的VkBool32实现为unsigned int?

通过在GitHub上托管的Sascha Willem的C++ Vulkan演示,我注意到一些函数返回了数据类型VkBool32.

我很好奇为什么当我注意到Line时,Khronos没有使用普通的bool

typedef uint32_t VkBool32;

在vulkan.h.uint32_t定义为

typedef unsigned int uint32_t;

在stdint.h中.

我的问题是,如果一个标准的Bool只用一个字节来完成这个工作,为什么它会让Sense丢掉3个字节?我的小Recherche显示没有性能差异(请参阅哪个更快:if(bool)或if(int)?),而Khronos他们自己说他们希望最小化兼容性问题(在这种情况下,旧C没有原始布尔类型)以便专注于现代代码.

(见Trevett的报价取自这里)

一个彻底的重新设计,我们不向后兼容

c c++ performance vulkan

7
推荐指数
1
解决办法
558
查看次数

将"int"或"bool"形式的标志传递给函数,在性能方面更好吗?

说,我有一个如下所示的功能

void caller()
{
    int flag = _getFlagFromConfig();
    //this is a flag, which according to the implementation
    //is supposed to have only two values, 0 and 1 (as of now)

    callee_1(flag);
    callee_2(1 == flag);
}

void callee_1(int flag)
{
    if (1 == flag)
    {
        //do operation X
    }
}

void callee_2(bool flag)
{
    if (flag)
    {
        //do operation X
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个被调用函数将是更好的实现?

我已经完成了这个链接,并且我非常确信在一个if条件下将bool用于比较没有太大的性能影响.但在我的情况下,我将标志作为整数.在这种情况下,第二个被叫者是否值得去?

c++ boolean function

1
推荐指数
1
解决办法
1454
查看次数

bool 与 int 数组的性能

在使用 Go 中的一些简单代码时,我注意到使用 bool 数组而不是 int 数组(仅使用 0/1 值)具有相当显着的加速效果。

  • funcUsingBool - 1.397s
  • funcUsingInt - 1.996s

我本来期望它们都能提供相同的性能,因为在机器级别没有本机 bool 类型,所以我期望编译器生成类似的汇编代码。

由于差异相当大,我对这个结果的有效性表示怀疑。

我正在使用命令“go build filename.go”进行构建,但我不确定 gcc 的“-O3”的等效标志是什么。

func funcUsingBool(n int) int {
    if n < 1 { return 0 }

    notPrime := make([]bool, n+1)
    count := 1
    for i := 3; i < n; i = i + 2 {
        if notPrime[i] { continue }
        count++
        k := 2 * i
        for k <= n {
            notPrime[k] = true
            k += i
        } …
Run Code Online (Sandbox Code Playgroud)

performance go

1
推荐指数
1
解决办法
2577
查看次数

标签 统计

boolean ×3

c++ ×3

performance ×2

c ×1

function ×1

go ×1

integer ×1

optimization ×1

types ×1

vulkan ×1