gpt4 book ai didi

c++ - Q : How bitset are inside?

转载 作者:可可西里 更新时间:2023-11-01 16:37:20 25 4
gpt4 key购买 nike

问题真的很简单(想问),std::bitset<32>uint32_t 相同为了内存?或者它更像是 std::array<bool, 32>

我通常会这样做:

uint32_t  index : 20;
uint32_t magic : 12;

那么它和这段代码一样吗?

std::bitset<20>  index;
std::bitset<12> magic;

最佳答案

uint32_t  index : 20;
uint32_t magic : 12;

So it's the same as this code ?

std::bitset<20>  index;
std::bitset<12> magic;

绝对不是,了解其中的区别非常重要。

首先,std::bitset<> 的内部表示是向下实现。

除此之外,我们应该检查上面两个代码片段之间的区别。

在 C++ 中,位域 不是离散对象。这对多线程代码具有重要意义。

这是因为 c++11 和更高版本保证从两个线程对两个离散对象的无保护访问是安全的,但是另外两个线程对同一个非常量对象的访问是数据竞争,除非受到互斥体的保护。

在上面的 bitset 代码中,正确的说法是:

线程 1:index = 10;

线程 2:auto x = magic;

因为它们是离散对象,因此保证在从不同线程访问时不会导致数据竞争。

位域 代码中,这是不安全的。索引的更新将是与读取魔法的竞赛,这是未定义的行为。

关于c++ - Q : How bitset are inside?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40996214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com