日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

结构体后面定义一个空数组的含义

發布時間:2025/4/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 结构体后面定义一个空数组的含义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在寫C代碼,經常看到Linux 的頭文件中有的結構體后面會定義一個空數組,不知道其為何作用?經過高人指點終于明白其要點!

struct inotify_event {
? ?__s32 wd;
? ?__u32 mask;
? ?__u32 cookie;
? ?__u32 len;
? ?char name[0];
};
如上,結構體最后一個元素name為空數組。

這是個廣泛使用的常見技巧,常用來構成緩沖區。如果你是做嵌入式開發,這種技巧應該用得漫天飛了。 比起指針用空數組有這樣的優勢:

1. 不需要初始化,數組名直接就是緩沖區數據的起始地址(如果存在數據)

2. 不占任何空間,指針需要占用4 byte長度空間,空數組不占任何空間,節約了空間

“這個數組不占用任何內存”,意味著在計算結構體的size時,不會計算最后一個元素,例如上面sizeof(struct inotify_event) = 16 bytes (前四個元素的內存長度)


這種空數組定義最適合制作動態buffer,因為可以這樣分配空間:

malloc( sizeof(struct XXX)+ buff_len );
這樣的好處是:直接就把buffer的結構體和緩沖區一塊分配了,空數組其實變成了buff_len長度的數組了,一次分配省了不少麻煩。

1. 大家知道為了防止內存泄漏,如果是分兩次分配(結構體和緩沖區),那么要是第二次malloc失敗了,必須回滾釋放第一個分配的結構體。這樣帶來了編碼麻煩。

2. 其次,分配了第二個緩沖區以后,如果結構里面用的是指針,還要為這個指針賦值。同樣,在free這個buffer的時候,用指針也要兩次free。如果用空數組,所有問題一次解決

如此看來,用空數組既簡化編碼,又解決了內存管理問題提高了性能,何樂不為?應該廣泛采用。
————————————————
版權聲明:本文為CSDN博主「蒼痕」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wangbaochu/article/details/50663876

總結

以上是生活随笔為你收集整理的结构体后面定义一个空数组的含义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。