我对C++中的打包/对齐的概念不太熟悉,我最近对此做了一些阅读,并有一个疑问。
我是从基类派生的(由其他人编写,并且我有相应的 header )。此类的作者已使用pragma pack将成员对齐到1个字节的边界。但是我不确定派生类是否有必要做同样的事情,打包/不打包与基类对齐的派生类有什么后果?
任何帮助/建议将不胜感激
谢谢
最佳答案
在日常工作中,编写良好的 C++代码通常与填充是否无关紧要,尽管选择可能会影响性能。因此,您应该能够从该基类派生,而不必担心自己明确指定任何包装。就是说,可能会打包基类,因为在内存中有大量实例或按位复制到文件或网络流,在这种情况下,您需要考虑新类的实例是否最终与该数据混合,以及出于相同的原因,是否还要对额外的数据成员使用打包。
并非所有代码都写得很好。例如,如果程序将对象视为数据的二进制Blob,并在其上使用诸如memcmp
之类的功能,或者对它们进行按字节的void*
/ size校验和,则填充成员中的垃圾数据可能会破坏逻辑/行为。如果数据是用特定的分隔符或定界符逐个对象写入的,则嵌入的垃圾可能会注入(inject)不需要的分隔符/定界符并破坏读取/解析逻辑。如果不对现有代码进行影响研究,就无法评估这些风险。
关于c++ - 使用pragma pack和继承进行c++对齐,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20754452/