C++ - CSTYLE结构/类包装相关
C++ - cstyle structure/class packing pertinent?
上下文
我主要用 C 语言编码。尝试 c++。
不够好,无法告诉自己。但正在改善。
问题
struct AND 类是否受益于 c++ 中的结构打包,或者它只是一个 c'ish 的东西?
c++增加了很多魔力吗?
私有/受保护/公共部分会搞砸吗?
谢谢
100%向后兼容C结构。所有相同的规则都适用。类只是一个结构,其中默认值是私有的而不是公共的。因此,相同的规则仍然适用。您可以按照应用的正常 C 对齐和填充规则指定的顺序获取结构/类的所有成员。
但是不要去告诉编译器打包你的结构或类。编译器通常插入的额外填充意味着可以更快地访问成员。打包结构需要更多的 CPU 时间来访问成员(主要是在 x86/amd64 上(或更复杂的代码来执行未对齐的访问(几乎所有其他 CPU(。
打包结构的唯一好理由是将结构存储在文件中或通过网络传输它们,其中不同系统的不同对齐和填充规则会导致不兼容。如果需要,请在保存/发送之前尽可能晚地将数据打包到打包结构中,并在读取/接收后尽快将其解压缩到未打包的结构中。您可以同时进行字节序转换。
首先有两个不同的术语data structure alignment
和data structure padding
。
数据对齐意味着将数据放在等于字大小的某个倍数的内存偏移量处,由于 CPU 处理内存的方式,这提高了系统的性能。
为了对齐数据,可能需要在最后一个数据结构的末尾和下一个数据结构的开头之间插入一些无意义的字节,即数据结构填充。
对于您的问题"Do struct AND classes benefit from structure packing in c++"
尽管 C 和 C++ 不允许编译器对结构成员进行重新排序以节省空间,但其他语言可能。也可以将结构most C and C++ compilers to "pack" the members
分辨到一定程度的对齐方式,例如"pack(2("表示将大于一个字节的数据成员对齐到两个字节的边界,以便任何填充成员最多有一个字节长。
通过更改结构中成员的顺序,可以更改保持对齐所需的填充量。例如,如果成员按降序对齐要求排序,则需要最少量的填充,这意味着在结构中排列元素,开头最大。
- 如何在c++17中制作一个模板包装器/装饰器
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 用pybind11包装C++抽象类时出错
- 为左值和右值的包装器实现C++范围
- C结构,其指针将被包装在unique_ptr中
- 如何包装第三方DLL在R中使用
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 将 N-arg 函数包装到另一个函数中
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 包装一个对象并假装它是一个 int
- 使用 Python Extension API 包装复杂C++类
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 包装C++类时不完整的类型 GLFWwindow
- 将函数包装器转换为 std::function
- C++函数包装器来捕获某些信号
- 创建包装升压适配器的自定义范围类
- 如何包装(撰写)增强 hana 地图并访问括号运算符(运算符 [])?
- C++ - CSTYLE结构/类包装相关