相关疑难解决方法(0)

为什么C需要挥发性?

为什么volatileC需要?它是干什么用的?它会做什么?

c declaration volatile

396
推荐指数
15
解决办法
27万
查看次数

什么样的优化在C++中"易失"?

我正在查找关键字volatile以及它的用途,我得到的答案非常多:

它用于防止编译器优化代码.

有一些示例,例如轮询内存映射硬件时:没有volatile轮询循环将被删除,因为编译器可能会识别出条件值永远不会更改.但由于只有一个例子或两个例子,它让我思考:volatile在避免不必要的优化方面我们还需要使用其他情况吗?条件变量是唯一volatile需要的地方吗?

我认为优化是特定于编译器的,因此未在C++规范中指定.这是否意味着我们必须通过直觉,说嗯,我怀疑如果我没有声明该变量volatile或者是否有任何明确的规则,我的编译器将废除它

c++ optimization volatile

25
推荐指数
3
解决办法
8600
查看次数

我可以在C++中使用互斥或​​关键字(静态)而不是volatile吗?

我知道C++中的volatile 是如何工作的.但是,我仍然对为什么我们需要挥发性感到困惑.我认为唯一的原因是我们需要监听变量是否发生了变化,如下面的代码所示:

volatile int some_int = 100;

while(some_int==100) {
    doSomething()
}
Run Code Online (Sandbox Code Playgroud)

程序员需要知道some_int这个词是否改变了,所以他使用"volatile".我可以使用关键词"静态"吗?

大多数情况下,我认为如果在多线程中需要同步,我们应该互斥(锁定)以进行同步.请原谅我可怜的英文:)

c++ mutex volatile

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

C++20 std::atomic<float>- std::atomic<double>.specializations

C++20 包括atomic<float>和的专门化atomic<double>。这里有人能解释一下这有什么实际用途吗?我能想象的唯一目的是,当我有一个线程在随机点异步更改原子双精度或浮点并且其他线程异步读取该值时(但易失性双精度或浮点实际上应该在大多数平台上执行相同的操作)。但这种需要应该是极其罕见的。我认为这种罕见的情况不能证明纳入 C++20 标准是合理的。

c++ floating-point multithreading memory-model stdatomic

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

SIMD内在和内存总线大小 - CPU如何读取单个内存中的所有128/256位读取?

你好论坛 - 我有一些关于SIMD内在的类似/相关问题我在网上搜索了包括stackoverflow但没有找到好的答案所以请求你的帮助.

基本上我试图理解64位CPU如何在一次读取中获取所有128位,以及这种操作的要求是什么.

  1. CPU会在单个内存操作中从内存中获取所有128位还是会进行两次64位读取?
  2. CPU制造商是否需要一定大小的内存总线,例如,对于64位CPU,英特尔需要128位总线来进行SSE内存绑定操作吗?
  3. 这些操作是否依赖于内存总线大小,通道数和内存模块数量?

sse x86-64 simd cpu-architecture memory-bandwidth

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