[C/C++] Structure Size

  • Structure Size

    這是一個程式設計師在處理structure常會忽略的問題,舉以下的範例來說明:

    預期之下我們會認為是30+4 bytes,但是實際輸出是36 bytes,當然這是可以解釋的,因為編譯器要為CPU做最佳化處理,所以檔案大小會對齊於可除4的位置,所以結果才會是36bytes。

    這樣的特性卻很有可能造成另一個問題,尤其是當我們在處理影音的程式時,我們並需要大量的讀寫結構體,當結構體變得很複雜時,你很難掌控結構體大小,錯誤很有可能就在這個時候發生,所以在處理多型態混雜的結構體時,我會用下面的方式宣告。

    使用#pragma強制結構體的宣告依照我們所定義的大小而定,雖然這樣做事必會損失一點執行效率,但是在處理複雜的程式時,像是大型的genetic programming,我們寧可選擇讓結構體不最佳化來宣告,以避免出錯時要花更多的時間去debug,甚至你有可能完全忽略他所造成的錯誤,進而產生錯誤的數據。

No comments:

Post a Comment

Orange - data analysis tool

Installation pip install orange3 Run orange python -m Orange.canvas