位域分配-安全吗?

用户名

我在位域中塞满了一堆属性以节省空间:

struct Flags {
    uint access : 2;
    uint status : 2;
    uint isEnabled : 1;
    uint isDeletable: 1;
    ...
};

然后,我有一个静态的Flags defaultFlags程序启动时初始化的。我的主要问题是flags = defaultFlags;在对象构造函数中是否安全,以便消除用于分别分配每个字段的20行?

另外,我想知道序列化怎么办?根据编译器的说法,它Flags是4个字节,我可以将其序列化为32位无符号整数并对其进行反灭菌处理而不会造成任何数据损坏吗?

哥伦布

我的主要问题是标记= defaultFlags是否安全?在对象构造函数中,为了消除单独分配每个字段的20行?

是的。隐式定义的副本构造函数Flags将适当地分配每个Bitfield。[class.copy] / 15:

每个基本或非静态数据成员都按照适合其类型的方式进行复制/移动:

  • 如果成员是数组,则[..]
  • 如果成员m具有右值引用类型T && [..]
  • 否则,将使用的相应
    基础或成员直接初始化该基础或成员x

我如何将其序列化为32位无符号整数并对其进行反灭菌处理而没有任何数据损坏?

如果在具有相同编译程序的同一台计算机上读写文件,则可以。尽管其他编译器或体系结构的布局可能有所不同,但该标准并未在这方面强加任何固定要求。[class.bit] / 1:

类对象内的位域分配由实现定义。位域的对齐由实现定义。位字段打包到一些可寻址的分配单元中。[注意:在某些机器上位域跨越分配单元,而在其他机器上则不。在某些计算机上,位字段是从右到左分配的,在其他计算机上是从左到右分配的。—尾注]

如果将其写入char大小数组,则将其sizeof Field写入文件,然后再次从文件中提取出来,然后将其复制回Field对象应具有相同的值。[basic.types] / 2(重点是我的):

对于任何可复制类型的对象(基类子对象除外)T,无论该对象是否具有有效的type值,T都可以将构成对象的基础字节(1.7)复制到charor的数组中unsigned char如果数组的内容被复制回对象,则对象随后应保留其原始值。charunsigned char

但是,正如评论中指出的那样,使用位掩码可以实现完全的可移植性(和合理的效率)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

由new分配的free()内存安全吗?

来自分类Dev

由new分配的free()内存安全吗?

来自分类Dev

此副本分配操作安全吗?

来自分类Dev

在 Java 中分配 List 是线程安全的吗?

来自分类Dev

枚举是位域实现定义的类型吗?

来自分类Dev

比长长的位域长吗?

来自分类Dev

C ++ 2位位域数组可能吗?

来自分类Dev

它是安全的锁/作用域保护工具吗?

来自分类Dev

带有unix域套接字的IPC安全吗?

来自分类Dev

它是安全的锁/作用域保护工具吗?

来自分类Dev

.NET对WSAStartup的使用对64位应用程序安全吗?

来自分类Dev

线程安全地分配shared_ptr nullptr吗?

来自分类Dev

C ++ 11中的动态内存分配是线程安全的吗?

来自分类Dev

创建和分配值到List <T>线程安全吗?

来自分类Dev

用char数组分配结构直接安全吗?

来自分类Dev

std :: vector :: data()重新分配安全吗?

来自分类Dev

在C中分配的指针上进行malloc安全吗?

来自分类Dev

创建和分配值到List <T>线程安全吗?

来自分类Dev

线程安全地分配shared_ptr nullptr吗?

来自分类Dev

对于预分配的数组,Ruby Array#[] =线程安全吗?可以将其设为无锁吗?

来自分类Dev

对于预分配的数组,Ruby Array#[] =线程安全吗?可以将其设为无锁吗?

来自分类Dev

位域是对齐数据的一种方式吗?

来自分类Dev

static_cast 可以用于位域吗?

来自分类Dev

在安全管理器下解决了多个域后,程序用完了内存吗?

来自分类Dev

在安全性方面,允许特定域的CORS有意义吗?

来自分类Dev

chrome 扩展程序可以监控清单文件中允许域的安全 cookie 吗?

来自分类Dev

在逐字节的32位数据数组上进行读写安全吗?

来自分类Dev

我可以安全地指向重新分配的boost :: optional的数据吗?

来自分类Dev

此原始类型分配类型安全吗?List <T> = new ArrayList();

Related 相关文章

  1. 1

    由new分配的free()内存安全吗?

  2. 2

    由new分配的free()内存安全吗?

  3. 3

    此副本分配操作安全吗?

  4. 4

    在 Java 中分配 List 是线程安全的吗?

  5. 5

    枚举是位域实现定义的类型吗?

  6. 6

    比长长的位域长吗?

  7. 7

    C ++ 2位位域数组可能吗?

  8. 8

    它是安全的锁/作用域保护工具吗?

  9. 9

    带有unix域套接字的IPC安全吗?

  10. 10

    它是安全的锁/作用域保护工具吗?

  11. 11

    .NET对WSAStartup的使用对64位应用程序安全吗?

  12. 12

    线程安全地分配shared_ptr nullptr吗?

  13. 13

    C ++ 11中的动态内存分配是线程安全的吗?

  14. 14

    创建和分配值到List <T>线程安全吗?

  15. 15

    用char数组分配结构直接安全吗?

  16. 16

    std :: vector :: data()重新分配安全吗?

  17. 17

    在C中分配的指针上进行malloc安全吗?

  18. 18

    创建和分配值到List <T>线程安全吗?

  19. 19

    线程安全地分配shared_ptr nullptr吗?

  20. 20

    对于预分配的数组,Ruby Array#[] =线程安全吗?可以将其设为无锁吗?

  21. 21

    对于预分配的数组,Ruby Array#[] =线程安全吗?可以将其设为无锁吗?

  22. 22

    位域是对齐数据的一种方式吗?

  23. 23

    static_cast 可以用于位域吗?

  24. 24

    在安全管理器下解决了多个域后,程序用完了内存吗?

  25. 25

    在安全性方面,允许特定域的CORS有意义吗?

  26. 26

    chrome 扩展程序可以监控清单文件中允许域的安全 cookie 吗?

  27. 27

    在逐字节的32位数据数组上进行读写安全吗?

  28. 28

    我可以安全地指向重新分配的boost :: optional的数据吗?

  29. 29

    此原始类型分配类型安全吗?List <T> = new ArrayList();

热门标签

归档