在类上使用#pragma pack
Use of #pragma pack on a class
我们可以在类之前使用#pragma pack()吗?
pragma在这里的意义是什么?我知道它用于向编译器提供有关实现的信息,但是如果我们将它与类一起使用呢?
它对类和对结构体具有完全相同的效果,影响数据成员的对齐。
实际上在类中使用它是非常不寻常的,几乎总是一个错误。c++类对象的布局很大程度上是由实现定义的。c++编译器通常会努力优化这种布局,在可能的情况下删除v-table指针。当类使用多重继承时,可能会添加一个。因此,对类声明进行微小的更改,例如使方法变为虚或添加基类,都可以显著地改变对象布局。这当然会破坏依赖于该pragma的代码。例如,序列化为二进制文件的对象将不再正确地反序列化。一般来说,这也是一种不好的做法,但无论如何总是会发生。
相关文章:
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- #pragma 包(1)会导致分段错误
- 禁止显示有关包含文件中 #pragma 包的警告
- 编译时检查 #pragma 包的使用情况
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- #pragma(*诊断)当将Clang分析器与GCC编译器混合时
- 如何在 cpp 中解压缩数字,如果它们是使用 struct.pack(fmt, v1, v2, ..) 打包在 pyth
- #pragma 警告不适用于 catch 语句
- Msgpack能否提供更好的性能和与Python的struct.pack()相同的功能?
- 条件变量和#pragma Pack错误
- C 带有Pragma Pack的错误值
- 由于#Pragma Pack错误而导致的内存损坏 - std Map损坏 - 插入上崩溃
- GCC上的#pragma-pack(push,n)/#pragma-pack(pop)和__attribute__((_
- 在类上使用#pragma pack
- #pragma pack,模板类型和结构对齐
- "pragma pack 1"是否有助于避免堆碎片?
- #pragma pack(show) with GCC
- Visual Studio中pragma pack指令的作用域
- "#pragma pack"在网络编程中的作用是什么
- 结构大小和内存布局取决于#pragma pack