2012-02-08 128 views

回答

3

當您需要內存佈局以完全匹配其他地方定義的二進制格式時,例如。文件格式或網絡協議。

1

一般應該避免。適合的邊緣情況是當使用結構在各種體系結構的機器之間進行通信時(例如在通過網絡傳遞的數據中)。但是即使在這種情況下,您也必須知道您支持的任何對齊問題的體系結構(例如,如果它只允許在四字邊界上進行訪問)。

0

我使用它的唯一時間是當我有一個VB程序調用C++ DLL時。結構HAD匹配或沒有工作。

+0

當你從VB的C++調用時你做了什麼?你需要指定packsize到什麼? – user496949 2012-02-08 23:07:30

+0

我把它們包裝好了,所以沒有在結構中填充......然後它們匹配。我還痛苦地發現VB int與C++ int(當時)的大小不同。結構中項目的大小也必須匹配。 – 2012-02-08 23:18:09

0

如果你正在談論#pragma pack,那是用來指定data alignment。如果要獲取結構的大小(例如,用於內存分配),請使用sizeof運算符。

structSize = sizeof(myStructType); 
相關問題