結構體
作用:封裝資料。
結構體需要注意的是記憶體空洞問題
如下面的例子:
struct node ;
int main()
正常分析輸出結果應該為1+4+1=6;
可輸出結果為12;
因為第乙個char系統為它分配4個位元組,可它只用得到乙個位元組,剩餘3個閒置。
第二個是int型,佔四個位元組,前面只剩3個位元組,它不會填充到前面空間中,系統會重新分配給它四個位元組,這四個位元組被填滿了。
然後到第二個char,它不會填充到第乙個char型剩餘的3個位元組中,而是系統又為它分配4個位元組儲存空間,還是會有3個位元組閒置。
最後總共占用12個位元組。
如果修改一下
struct node;
則結果為8.
第一次分配4個位元組剩3個,第二個char會直接存入剩餘的3個位元組中,然後最後的int再分配4個位元組,總共8個位元組.
之所以每次以4個位元組為一組,是因為這是字對齊。如果把int換為short型,那系統每次分配的就是2個位元組為一組,這是半字對齊,當short與int同時出現,則是字對齊。
特殊情況:
struct node ;
這三個如果按此順序出現,則佔12位元組。
結構體內存
c語言中結構體占用記憶體問題 之前對結構體占用記憶體一直很混亂,到底是按照哪個變數型別計算記憶體?還是怎麼計算?下面先看乙個例子 struct str1 str1這個結構體占用的記憶體是多少呢?如果用變數型別直接想加,得到的結果是17,但顯然不是這樣的。這個程式執行的正確結果是24.為什麼呢?因為為...
結構體內存對齊
結構體內存對齊 一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這...
結構體內存對齊
一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的...