小编spi*_*123的帖子

函数的默认参数

假设我在 C++ 中有一个如下所示的函数,

int sum(int x = 0, int y = 0) {
    return x + y;
}
Run Code Online (Sandbox Code Playgroud)

我可以通过调用函数来使用 y 的默认值,sum(3)然后返回 3。是否可以使用 x 的默认值,而不是 y?我知道我可以像这样显式地使用 x 的默认值调用该函数sum(0,4),但是有没有一种方法可以像sum(y = 4)这样使用 x 的默认值来调用该函数?

c++

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

C 中的内联汇编

我正在用 c 语言编写一个国际象棋引擎,速度至关重要。国际象棋引擎基于 unsigned long long,我将其表示为 u64,并且它严重依赖于最低有效位扫描。到目前为止,我一直在使用 gcc 函数 __builtin_ctzll ,它做得很好。然而,我使用 gcc -S -O2 为这个独立函数生成了汇编代码。它给了我以下内容:

xorl     %eax, %eax
rep bsfq %rdi, %rax
cltq
ret
Run Code Online (Sandbox Code Playgroud)

然而经过一番调查似乎代码

rep bsfq %rdi, %rax
ret
Run Code Online (Sandbox Code Playgroud)

在我的国际象棋程序中做了完全相同的事情。然而现在速度慢了约 20%。它应该更快,因为它的指令更少。然而,原始的 __builtin_ctzll 内联在我的 C 代码中。这是我的自定义汇编代码运行速度比原始代码慢的原因吗?因为当我声明函数 ctzll 时,我当然不能在 c 中内联声明它,除非我有定义(不在汇编代码中)。

是否有另一种方法来优化汇编指令,或者我应该尝试直接在 c 中内联 asm 的新汇编代码?

c assembly gcc x86-64 micro-optimization

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

标签 统计

assembly ×1

c ×1

c++ ×1

gcc ×1

micro-optimization ×1

x86-64 ×1