相关疑难解决方法(0)

高效的整数比较功能

compare函数是一个函数,它接受两个参数a,b并返回一个描述其顺序的整数.如果a小于b,则结果为负整数.如果a大于b,则结果为正整数.否则,a并且b相等,结果为零.

此功能通常用于参数化标准库中的排序和搜索算法.

实现compare字符功能非常简单; 你只需减去参数:

int compare_char(char a, char b)
{
    return a - b;
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为通常假设两个字符之间的差异适合整数.(请注意,此假设不适用于以下系统sizeof(char) == sizeof(int).)

这个技巧无法比较整数,因为两个整数之间的差异通常不适合整数.例如,INT_MAX - (-1) = INT_MIN建议INT_MAX小于-1(技术上,溢出导致未定义的行为,但让我们假设模运算).

那么我们如何才能有效地为整数实现比较函数呢?这是我的第一次尝试:

int compare_int(int a, int b)
{
    int temp;
    int result;
    __asm__ __volatile__ (
        "cmp %3, %2 \n\t"
        "mov $0, %1 \n\t"

        "mov $1, %0 \n\t"
        "cmovg %0, %1 …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly inline-assembly

61
推荐指数
4
解决办法
3万
查看次数

C++函数指针与Switch

  • 什么是更快:功能指针或开关?

switch语句大约需要30 case秒,包括从0到30的被禁止的无符号整数.

我可以做以下事情:

class myType
{
    FunctionEnum func;
    string argv[123];
    int someOtherValue;
};
// In another file:
myType current;
// Iterate through a vector containing lots of myTypes
 // ... for ( i=0; i < myVecSize; i ++ )
    switch ( current.func )
    {
           case 1:
            //...
            break;
           // ........
           case 30:
             // blah
            break;
    }
Run Code Online (Sandbox Code Playgroud)

func每次都要通过开关.关于切换的好处还在于我的代码比30个函数更有条理.

或者我可以这样做(不太确定):

class myType
{
    myReturnType (*func)(int all, int of, int my, int args );
    string argv[123];
    int someOtherValue;
};
Run Code Online (Sandbox Code Playgroud)

我有30个不同的函数,在开始时,指向其中一个的指针被分配给myType. …

c++ performance

18
推荐指数
2
解决办法
9925
查看次数

if,switch和函数指针速度比较

我正在构建一个小型解释器,所以我想测试ifs,switch和指向函数的速度有多快.如果使用其他19 ifs比使用20个情况的切换稍快一些,并且函数指针(20个函数指针的数组)比前两个慢得多...

我预计结果会完全相反,有人可以解释一下吗?

c++

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

标签 统计

c++ ×2

assembly ×1

c ×1

inline-assembly ×1

performance ×1

x86 ×1