草庐IT

non-volatile

全部标签

c++ - "volatile"限定符和编译器重新排序

编译器无法消除或重新排序对volatile限定变量的读/写操作。但是如果存在其他变量(可能是也可能不是volatile-qualified)的情况呢?场景1volatileinta;volatileintb;a=1;b=2;a=3;b=4;编译器能否重新排序第一个和第二个,或者第三个和第四个赋值?场景2volatileinta;intb,c;b=1;a=1;c=b;a=3;同样的问题,编译器可以重新排序第一个和第二个,还是第三个和第四个赋值? 最佳答案 C++标准说(1.9/6):Theobservablebehaviorofthe

c# - C/C++ 和 C#/Java 之间 volatile 的用法有什么区别?

我在许多引用文献中发现它提到C/C++中的volatile很弱,可能会在多个处理器的并发环境中导致问题,但它(volatile)可以用作C#/Java中不同CPU之间的通信机制。看起来这个关键字在C#/Java中比在C/C++中更严格,但它们之间的区别/影响是什么?这里是C/C++中volatile的引用。WhyisvolatilenotconsideredusefulinmultithreadedCorC++programming? 最佳答案 对于C#/Java,“volatile”告诉编译器一个变量的值绝不能被缓存,因为它的值可

c++ - 为什么 volatile 不使用 std::min 编译

为什么下面的代码无法编译(gcc-5.4.0)?volatileinti{100};intj{200};std::cout我的意思是我看到编译器错误:error:nomatchingfunctionforcallto‘min(volatileint&,int&)’volatile不只是提示编译器,变量可以从程序外部更改吗?std::min(int(i),j);当然有效。但是原创作品不也应该吗? 最佳答案 volatile是一个qualifier就像const一样。这不仅仅是对编译器的提示。std::min期望这两个参数具有完全相同的

c++ - C/C++ 稀有关键字 - register、volatile、extern、explicit

很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。为了帮助澄清这个问题以便可以重新打开它,visitthehelpcenter.关闭11年前。您能否简要介绍一下这4个关键字的用途和原因?我了解google会告诉您的关于register和volatile的基本知识,但想了解更多(只是一个实用的概述)。外部和显式让我有点困惑,因为尽管做了相当低级的嵌入式系统代码,但我从来没有找到自己必须使用它们的理由。再说一次,我可以用谷歌搜索,但我更喜欢专家提供的快速实用的总结,以便牢记在心。 最佳答案

c++ - 错误 : ISO C++ forbids in-class initialization of non-const static member

这是头文件:employee.h#ifndefEMPLOYEE_H#defineEMPLOYEE_H#include#includeusingnamespacestd;classEmployee{public:Employee(conststring&first,conststring&last)重载的构造函数:firstName(first),firstName重载构造函数lastName(last)lastName重载构造函数{//Theconstructorstart++counter;它为每个创建的对象加一;cout析构函数cout返回每个对象的名字和姓氏--counter;计

c++ - 为什么 ostream 为定义为 `1` 的字符串打印 `volatile char[]` ?

这个问题在这里已经有了答案:Whydoesstd::coutconvertvolatilepointerstobool?(4个回答)关闭8年前。考虑这个(人工)示例:#include#includeintmain(){volatilechartest[]="abc";std::printf("%s\n",test);std::cout使用GCC编译并运行会得到以下输出:$g++test.cc$./a.outabc1如您所见,printf正确打印字符串,而cout打印1。为什么在这种情况下写入cout会产生1? 最佳答案 operat

C++:std::atomic<bool> 和 volatile bool

我正在阅读AnthonyWilliams的C++concurrencyinactionbook。这个经典的例子有两个线程,一个产生数据,另一个消耗数据,A.W.这段代码写得很清楚:std::vectordata;std::atomicdata_ready(false);voidreader_thread(){while(!data_ready.load()){std::this_thread::sleep(std::milliseconds(1));}std::cout而且我真的不明白为什么这段代码与我使用经典的volatilebool而不是原子的不同。如果有人能在这个问题上打开我的思

c++ - "non-native"指针会损害缓存性能吗?

据我所知,硬件预取器至少会检测并获取内存中的恒定步幅。另外它可以monitordataaccesspatterns,无论这真正意味着什么。这让我想知道,硬件预取器会根据存储在内存中的实际数据做出决定,还是纯粹基于程序表现出的行为?我问的原因是因为我偶尔会使用“非本地”指针作为指针。一个简单的例子是一个预先分配的数组,以及索引这个数组的小整数而不是指针。如果我需要存储大量这样的“指针”,那么节省的内存可以快速增加,进而通过使用更少的内存间接提高缓存性能。但据我所知,这可能会干扰硬件预取器的工作方式。或不!我当然可以想象,不管现实与否,一个预取单元检查进入L1高速缓存的本地指针地址的高速缓

c++ - std::is_trivially_copyable - 为什么 volatile 标量类型不能轻易复制?

C++17的当前标准(我观察到C++11的类似措辞)对于可复制的类型的措辞非常困惑。我首先通过以下代码(GCC5.3.0)偶然发现了这个问题:classTrivialClass{};std::is_trivially_copyable::value;//0std::is_trivially_copyable::value;//1??让困惑变得更糟,我试图查看std::is_trivial对此事的看法,但结果更加困惑。classTrivialClass{};std::is_trivial::value;//1??std::is_trivial::value;//1很困惑,我检查了最新的C

C++ - volatile应用于方法时代表什么?

如果我有如下C++方法声明:classA{public:doublegetPrice()volatile;};volatile在这里代表什么?它可以用来做什么?您可能对this感兴趣AndreiAlexandrescu的Dobbs博士文章。我是:)编辑:那篇文章是不久前写的,现在看来社区已经继续前进了。HerbSutter有话要说this.谢谢伊恩(和赫伯!)mlimber指出Andrei有一篇后续文章here他继续提倡使用volatile正确性作为检测支持类似POSIX互斥体的系统上的竞争条件的宝贵工具。 最佳答案 您可能熟悉co