結構體最後的零長度陣列
零長度陣列是C語言中的一個小技巧,在Linux核心程式碼中能見到很多例項。例如include/linux/mm.h中
/* Container for pinned pfns / pages */
struct frame_vector {
unsigned int nr_allocated; /* Number of frames we have space for */
unsigned int nr_frames; /* Number of frames stored in ptrs array */
bool got_ref; /* Did we pin pages by getting page ref? */
bool is_pfns; /* Does array contain pages or pfns? */
void *ptrs[0]; /* Array of pinned pfns / pages. Use
* pfns_vector_pages() or pfns_vector_pfns()
* for access */
};
其中ptrs就是零長度陣列,這種用法的特點是:
- 一般放在結構體的最後
- 結構體中要有記錄後續空間長度的資訊,例如nr_frames
- 申請空間的時候需要動態申請後續的連續空間
- 這種用法的好處是ptrs不佔用結構體的空間,因為一個零長度陣列,sizeof得到結果會是0,如果定義一個指標則需要額外的空間。
相關文章
- 字元陣列的長度字元陣列
- C++陣列長度C++陣列
- 陣列結構之陣列陣列
- Java 定義長度為 0 的陣列 / 空陣列Java陣列
- 978 最長湍流子陣列陣列
- C++獲取陣列的長度C++陣列
- Javascript如何改變陣列的長度?JavaScript陣列
- PHP 陣列轉樹結構/樹結構轉陣列PHP陣列
- 845. 陣列中的最長山脈陣列
- 構建最簡單陣列陣列
- C語言求其字元陣列的長度C語言字元陣列
- 203. 長度最小的子陣列陣列
- Leetcode 陣列中和為給定值的最長子陣列LeetCode陣列
- 字串最後一個單詞的長度字串
- 演算法陣列中降序數列的最大長度演算法陣列
- 陣列(ArrayPool陣列池、Span<T>結構)陣列
- 每日一練(45):長度最小的子陣列陣列
- c語言中計算陣列長度的方法C語言陣列
- C語言如何計算陣列的長度C語言陣列
- javascript如何獲取陣列的長度和遍歷陣列的每一項JavaScript陣列
- 用 GetLength(int dimension) 獲取陣列指定維度的長度。陣列
- 繩子的長度;及找陣列的波谷分析陣列
- 資料結構 - 陣列資料結構陣列
- 資料結構-陣列資料結構陣列
- 陣列結構 list () 的替代方法陣列
- C#結構體和位元組陣列的轉換C#結構體陣列
- Java 陣列的不同定義方式和陣列長度為可變引數Java陣列
- c語言獲取陣列長度的函式C語言陣列函式
- C語言中如何求一個陣列的長度C語言陣列
- C語言獲得陣列長度的函式C語言陣列函式
- Linux 核心裡的資料結構——位陣列位陣列宣告體系結構特定的位操作通Linux資料結構陣列
- 程式碼隨想錄陣列二刷:長度最小的子陣列(滑動視窗)陣列
- PHP獲取陣列最後一個值PHP陣列
- JavaScript刪除陣列最後一個元素JavaScript陣列
- JavaScript獲取陣列最後一個元素JavaScript陣列
- JavaScript 刪除陣列最後一個元素JavaScript陣列
- 線性結構(二)--陣列陣列
- 資料結構之「陣列」資料結構陣列