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