2

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

执行以下操作是否安全

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

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

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

甚至是完全不同的东西?

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

4

2 回答 2

6

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

在某些情况下,另一种选择是将数据直接读取到对象中。

于 2014-01-28T01:44:49.137 回答
0

这取决于。

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

于 2014-01-28T01:51:08.427 回答