Daily Archives: November 18, 2019

C語言的struct hack整理

在C語言中,有一個技巧叫struct hack,主要是要實現動態大小的struct 要紀錄的資訊有名字欄位,可以這樣設計 但是這邊假設name存的字串最長是31 + 1 bytes (null terminated string),如果要能動態長度就要改用指標處理,例如 這個的缺點就是 name的記憶體配置是另外配置,和person_info不在同一處,可能無法利用到cpu cache。 struct hack的作法是讓尾端可以動態大小,此時在struct最後面定義一個place holder malloc 會allocate 一塊空間包含struct member所需的,剩下的空間可以用name來存取 注意這裡name的用途是拿來做place holder,不用另外計算struct之後的起始位置,因為有時候有alignment padding的問題。 struct hack的作法只能用在最後一個member是不定大小。在C99 可以用flexible array member來描述 char name[]; flexible array member算是incomplete array type,所以不能直接sizeof §6.2.5 #12 An array type … Continue reading

Posted in C Language | Leave a comment