繁体   English   中英

C结构的对齐

[英]Alignment of C structure

我在文件中有一些二进制数据,并以char* data将文件加载到内存中。 现在我知道例如在偏移量123处开始struct something

执行以下操作是否安全?

(struct something*) (data + 123) // ??&data [123]??

然后访问该结构的成员。 或者我应该做类似的事情

struct something record;
memcpy (&record, data + 123, sizeof (struct something) );

甚至是完全不同的东西?

我的问题主要是出于动机,因为我对“内存对齐”,“单词边界”等有一些模糊的回忆。

是的,您应该使用memcpy而不是指针转换,这正是您所讨论的原因:对齐。 转换指针并不安全。 如果对齐错误,则C标准不能保证使用结果指针时的行为。

在某些情况下,一种替代方法是将数据直接读取到对象中。

这取决于。

在某些现代CPU(例如x86)上,可以访问未对齐的字以进行读/写操作,并且不会降低性能,尽管某些特定指令可能需要对齐的操作数(例如PPC上的CAS指令)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM