關於結構體的資料對齊?

時間 2022-01-22 01:44:25

1樓:Aman

一般來說,乙個變數只要能保證按自身對齊就夠了。多數變數,不按自身對齊也不會有問題,只不過會降低程式效能。但有些指令,例如 SIMD 系列指令,對對齊有嚴格的要求。

所以,你這個問題裡面,char 無論怎麼放都能自身對齊,所以沒任何問題。至於那個 8 位元組對齊,應該指的是 struct 本身。由於 struct 也能放在陣列裡,所以它也有對齊的問題。

但有些 struct 很大,按自身對齊可能導致不必要的浪費,所以其實只要能保證它裡面的變數都是對齊的就夠了。那麼,乙個 struct 只要按它裡面長度最大的那個變數對齊,就足夠了。

由於要保證對齊,所以記憶體分配器也要保證返回的指標是對齊的,如果沒有,則要選擇合適的分配方法。這點也要注意。

2樓:公尺卡利斯塞巴斯欽

對齊是對單個變數而言的

i是4位元組長所以首位址為4的倍數

c和d都是1位元組的位址為1的倍數

而j是8位元組長所以位址是8的倍數

(此處認為是LP64)

3樓:gmsj0001

變數起始位址一般對齊到sizeof該變數的倍數,結尾按照架構的alignment補齊

資料是什麼(四)資料的結構

禹鶴 自然災害或事故中的損失,一般是由基層往上層層上報。自然災害通常由民政部門負責,歸納整理資料。事故通常由具體分管部門,一般是安監部門。資料的收集方法,如果受災面積較大或事故複雜,抽取樣本,計算損失,再乘以受災總數。這類資料多是估算得出,因為都要的比較急,而且都是往上限去預估。關係到救災補助資金的...

關於演算法和資料結構和程式語言和程式的關係是什麼?

計算機底層都是 01010101010的二進位制存在記憶體中,為了讓人類能直觀運算元據,產生了資料結構,抽象出一種結構。C語言知識實現演算法的一種工具,用其他的工具也能實現。演算法大概就是,為了達成某種目的,一種思路。程式就是演算法的具體實現。使用特定的資料結構,並且用某種工具比如C語言編寫實現 L...

如何設計出精巧的資料結構?

雲悠水澈 這個問題,並不是一篇文章或一本書就能說清楚的,需要對特定問題深入的分析和大量的練習,建議多看一些成熟的協議,這些協議中的資料結構基本都很精巧,總結吸收裡面面對問題的設計思想和技巧。核心是 簡練 清楚明白。比如 iCalendar RFC 5545中怎樣準確標識乙個事務,怎樣處理乙個事務的迴...