相关疑难解决方法(0)

在x86汇编中将寄存器设置为零的最佳方法是什么:xor,mov或?

以下所有说明都做同样的事情:设置%eax为零.哪种方式最佳(需要最少的机器周期)?

xorl   %eax, %eax
mov    $0, %eax
andl   $0, %eax
Run Code Online (Sandbox Code Playgroud)

optimization performance x86 assembly micro-optimization

109
推荐指数
1
解决办法
4万
查看次数

C编程:从汇编程序的角度来看++ i和i = i + 1之间的区别?

这是一个面试问题.我说他们是一样的,但这被判定为不正确的回应.从汇编程序的角度来看,有什么可以想象的区别吗?我使用默认的gcc优化和-S编译了两个简短的C程序来查看汇编程序输出,它们是相同的.

c compiler-construction assembly compilation compiler-optimization

16
推荐指数
4
解决办法
8699
查看次数

什么时候不应该使用 [[carries_dependency]]?

我发现了一些问题(比如这个)问什么[[carries_dependency]]是,这不是我在这里问的。

我想知道你什么时候不应该使用它,因为我读过的所有答案都让人觉得你可以把这段代码贴在任何地方,而且你会神奇地得到相等或更快的代码。一个评论说代码可以相等或更慢,但海报没有详细说明。

我想在任何函数返回或参数上使用 this 的合适位置是指针或引用,并且将在调用线程内传递或返回,并且不应在回调或线程入口点上使用它。

有人可以评论我的理解并详细说明一般的主题,何时以及何时不使用它?

编辑:我知道这个主题有这本书,如果其他读者感兴趣的话;它可能包含我的答案,但我还没有机会通读它。

c++ multithreading memory-model carries-dependency stdatomic

5
推荐指数
2
解决办法
269
查看次数

内存顺序在 C11 中消耗使用量

我读过有关携带依赖关系和依赖关系排序之前,在其定义中使用一个5.1.2.4(p16)

在以下情况下,评估A在评估之前是依赖顺序的B

A对原子对象执行释放操作M,并在另一个线程中B执行消耗操作M并读取以 为首的释放序列中的任何副作用写入的值A,或

— 对于某些求值XA之前是依存顺序XX带有对 的依存关系B

所以我试图制作一个可能有用的例子。就这个:

static _Atomic int i;

void *produce(void *ptr){
    int int_value = *((int *) ptr);
    atomic_store_explicit(&i, int_value, memory_order_release);
    return NULL;
}

void *consume(void *ignored){
    int int_value = atomic_load_explicit(&i, memory_order_consume);
    int new_int_value = int_value + 42;
    printf("Consumed = %d\n", new_int_value);
}

int main(int …
Run Code Online (Sandbox Code Playgroud)

c multithreading c11 stdatomic

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