變長數據包
定長數組使用方便, 但是卻浪費空間, 指針形式只多使用了一個指針的空間, 不會造成大量空間分浪費, 但是使用起來需要多次分配, 多次釋放, 那么有沒有一種實現方式能夠既不浪費空間, 又使用方便的呢?
GNU C
的0長度數組(變長數組/柔性數組)就是這樣一個擴展. 對于0長數組的這個特點,很容易構造出變成結構體,如緩沖區,數據包等等:
- 數據結構定義
// 0長度數組
struct zero_buffer
{
int len;
char data[0];
};
- 數據結構大小
這樣的變長數組常用于網絡通信中構造不定長數據包, 不會浪費空間浪費網絡流量, 因為char data[0];
只是個數組名, 是不占用存儲空間的,
即 sizeof(struct zero_buffer) = sizeof(int)
- 數據包創建
我們使用的時候, 只需要開辟一次空間即可:
/// 開辟
if ((zbuffer = (struct zero_buffer *)malloc(sizeof(struct zero_buffer) + sizeof(char) * CURR_LENGTH)) != NULL)
{
zbuffer- >len = CURR_LENGTH;
memcpy(zbuffer- >data, "Hello World", CURR_LENGTH);
printf("%d, %sn", zbuffer- >len, zbuffer- >data);
}
- 釋放
釋放也是一樣的, 一次釋放即可:
/// 銷毀
free(zbuffer);
zbuffer = NULL;
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C語言
+關注
關注
180文章
7604瀏覽量
136827 -
數據包
+關注
關注
0文章
261瀏覽量
24394 -
數據結構
+關注
關注
3文章
573瀏覽量
40130
發布評論請先 登錄
相關推薦
OBS邊緣節點中變長數據包突發匯聚實現
基于光突發交換邊緣節點在組裝數據包前要采用交換陣對其進行突發匯聚,描述了交換陣常用的串行輸入輪循算法,根據邊緣節點中數據包變長突發匯聚的特點提出了變長串行輸
發表于 04-19 19:16
?18次下載
網絡數據包捕獲機制研究
網絡數據包捕獲技術,是實現入侵檢測、網絡安全審計的關鍵技術。本文改進了國外傳統的數據包捕獲函數庫Libpcap 捕獲數據包的方案。原方案在網卡捕獲到數據包后,
發表于 09-01 10:09
?9次下載
基于Jpcap的數據包捕獲器的設計與實現
本文研究了以太網數據包的捕獲機制,實現了基于JPcap的網絡數據包捕獲工具,其基本原理是通過調用Jpcap庫捕獲本地網絡上的所有數據包,然后對數據包進行協議解碼,從而可以實
發表于 01-15 13:47
?38次下載
什么是數據包?
什么是數據包?
您在互聯網上做的一切都涉及到數據包。例如,您接收的每個網頁都以一系列數據包的形式傳入,您發送的每封電子郵件都以一系列數據包的形式傳出。以
發表于 08-03 09:13
?2025次閱讀
數據結構是什么_數據結構有什么用
數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高
發表于 11-17 14:45
?1.6w次閱讀
![<b class='flag-5'>數據結構</b>是什么_<b class='flag-5'>數據結構</b>有什么用](https://file1.elecfans.com//web2/M00/A6/EA/wKgZomUMQTmAITjkAAARDaPRhyE645.jpg)
什么是數據結構?為什么要學習數據結構?數據結構的應用實例分析
本文檔的主要內容詳細介紹的是什么是數據結構?為什么要學習數據結構?數據結構的應用實例分析包括了:數據結構在串口通信當中的應用,數據結構在按鍵
發表于 09-26 15:45
?14次下載
![什么是<b class='flag-5'>數據結構</b>?為什么要學習<b class='flag-5'>數據結構</b>?<b class='flag-5'>數據結構</b>的應用實例分析](https://file.elecfans.com/web1/M00/65/7A/o4YBAFurOTuAdCq3AABVU-eOQhY072.png)
網絡數據包分析軟件wireshark的基本使用
Wireshark(前稱Ethereal)是一個網絡數據包分析軟件。網絡數據包分析軟件的功能是截取網絡數據包,并盡可能顯示出最為詳細的網絡數據包數據
NetApp的數據結構是如何演變的
統一數據跨分布式資源進行管理,以實現數據移動的一致性和控制,安全、可見性、保護和訪問。
本文定義了數據結構及其體系結構,討論了
發表于 08-25 17:15
?0次下載
![NetApp的<b class='flag-5'>數據結構</b>是如何演變的](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何使用指針數據包定義數據緩沖區
, 只浪費了一個指針域的空間. 數據包定義 struct point_buffer{ int len; char * data ;}; 數據結構大小 考慮對齊, 那么數據結構的大小 >
評論