簡體   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