2016-04-25 78 views
-1

我知道如何結構的填充工作,也的數據填充虛擬字節的必要性。填充通過減少獲取相同數據的週期數來增加h/w性能。另一方面,打包允許我們將數據放在一起,因此CPU(可能)必須使用多個週期才能完整地獲取整個數據。 那麼包裝的必要性是什麼,儘管它降低了性能。 請建議一些需要包裝的情況。 我假設h/w中的字長爲4字節。填充和包裝的結構

感謝&問候 阿米特庫馬爾

回答

2

它往往是空間/存儲器和CPU時間之間的折衷。我經常在嵌入式代碼中使用struct packing來減小大小,並且很清楚它需要額外的掩碼指令才能使用。

它也可以用於數據序列化/反序列化有用,你可以看到的數據結構更明確(聲明?)如果是在一個擁擠的結構來定義。 然而,這往往是一個值得商榷的位置,因爲memcpy-直接在緩衝區和數據結構之間被很多人認爲是不好的做法。

1

我認爲通過「包裝」你的意思是移除填充,使用非標準編譯或屬性(如GCC的__attribute__((packed)))。有兩個主要原因可以做到這一點:

  1. 減少內存分配。如果您將分配大量對象,則由於填充造成的額外分配可能會很大。
  2. 爲了使在存儲器佈局反映在磁盤上的佈局或在一個特定的協議(特別的文件格式例如當處理)。這可能允許直接讀寫結構對象,而不必分別處理每個字段。 (單個字段內的字節順序可能仍然是一個問題)。

一般來說,這種做法是不可移植的,除非你有很好的理由,否則你應該避免這種做法。

在許多情況下,可以減少通過重新組織數據結構所需的填充:把最大的成員第一,然後將下面的成員減少大小順序。

+0

尼斯但'packing'通常稱爲分組對象作爲在結構的情況下。我不太明白它的意思。 – sjsam

+0

感謝您的回覆。 –