我知道如何結構的填充工作,也的數據填充虛擬字節的必要性。填充通過減少獲取相同數據的週期數來增加h/w性能。另一方面,打包允許我們將數據放在一起,因此CPU(可能)必須使用多個週期才能完整地獲取整個數據。 那麼包裝的必要性是什麼,儘管它降低了性能。 請建議一些需要包裝的情況。 我假設h/w中的字長爲4字節。填充和包裝的結構
感謝&問候 阿米特庫馬爾
我知道如何結構的填充工作,也的數據填充虛擬字節的必要性。填充通過減少獲取相同數據的週期數來增加h/w性能。另一方面,打包允許我們將數據放在一起,因此CPU(可能)必須使用多個週期才能完整地獲取整個數據。 那麼包裝的必要性是什麼,儘管它降低了性能。 請建議一些需要包裝的情況。 我假設h/w中的字長爲4字節。填充和包裝的結構
感謝&問候 阿米特庫馬爾
它往往是空間/存儲器和CPU時間之間的折衷。我經常在嵌入式代碼中使用struct packing來減小大小,並且很清楚它需要額外的掩碼指令才能使用。
它也可以用於數據序列化/反序列化有用,你可以看到的數據結構更明確(聲明?)如果是在一個擁擠的結構來定義。 然而,這往往是一個值得商榷的位置,因爲memcpy
-直接在緩衝區和數據結構之間被很多人認爲是不好的做法。
我認爲通過「包裝」你的意思是移除填充,使用非標準編譯或屬性(如GCC的__attribute__((packed))
)。有兩個主要原因可以做到這一點:
一般來說,這種做法是不可移植的,除非你有很好的理由,否則你應該避免這種做法。
在許多情況下,可以減少通過重新組織數據結構所需的填充:把最大的成員第一,然後將下面的成員減少大小順序。
尼斯但'packing'通常稱爲分組對象作爲在結構的情況下。我不太明白它的意思。 – sjsam
感謝您的回覆。 –