[英]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.