變長數(shù)據包
定長數(shù)組使用方便, 但是卻浪費空間, 指針形式只多使用了一個指針的空間, 不會造成大量空間分浪費, 但是使用起來需要多次分配, 多次釋放, 那么有沒有一種實現(xiàn)方式能夠既不浪費空間, 又使用方便的呢?
GNU C
的0長度數(shù)組(變長數(shù)組/柔性數(shù)組)就是這樣一個擴展. 對于0長數(shù)組的這個特點,很容易構造出變成結構體,如緩沖區(qū),數(shù)據包等等:
- 數(shù)據結構定義
// 0長度數(shù)組
struct zero_buffer
{
int len;
char data[0];
};
- 數(shù)據結構大小
這樣的變長數(shù)組常用于網絡通信中構造不定長數(shù)據包, 不會浪費空間浪費網絡流量, 因為char data[0];
只是個數(shù)組名, 是不占用存儲空間的,
即 sizeof(struct zero_buffer) = sizeof(int)
- 數(shù)據包創(chuàng)建
我們使用的時候, 只需要開辟一次空間即可:
/// 開辟
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;
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
C語言
+關注
關注
180文章
7581瀏覽量
135584 -
數(shù)據包
+關注
關注
0文章
244瀏覽量
24325 -
數(shù)據結構
+關注
關注
3文章
569瀏覽量
40063
發(fā)布評論請先 登錄
相關推薦
什么是數(shù)據結構(Data Structrue)
的一個一個元素數(shù)據對象:具有相同特性的數(shù)據元素的集合結構:數(shù)據元素之間具有的關系(聯(lián)系) 二. 數(shù)據結構的
發(fā)表于 02-09 17:17
數(shù)據結構
1.數(shù)據結構的概念
所謂數(shù)據結構是指由某一數(shù)據對象及該對象中所有數(shù)據成員之間的關系組成的集合。成員之間的關系有很多種,最常見的是前后件關系。
2.
發(fā)表于 03-04 14:13
數(shù)據結構鏈表的基本操作
嵌入式學習基礎-數(shù)據結構鏈表的基本操作鏈表節(jié)點采用結構體的方式進行定義,下面是最基礎的定義只有一個數(shù)據data,*pNext用于指向下一個節(jié)
發(fā)表于 12-22 08:05
OBS邊緣節(jié)點中變長數(shù)據包突發(fā)匯聚實現(xiàn)
基于光突發(fā)交換邊緣節(jié)點在組裝數(shù)據包前要采用交換陣對其進行突發(fā)匯聚,描述了交換陣常用的串行輸入輪循算法,根據邊緣節(jié)點中數(shù)據包變長突發(fā)匯聚的特點提出了變長串行輸
發(fā)表于 04-19 19:16
?18次下載
數(shù)據結構教程,下載
1. 數(shù)據結構的基本概念
2. 算法與數(shù)據結構3. C語言的數(shù)據類型及其算法描述要點4. 學習算法與數(shù)據結構的意義與方法
發(fā)表于 05-14 17:22
?0次下載
網絡數(shù)據包捕獲機制研究
網絡數(shù)據包捕獲技術,是實現(xiàn)入侵檢測、網絡安全審計的關鍵技術。本文改進了國外傳統(tǒng)的數(shù)據包捕獲函數(shù)庫Libpcap 捕獲數(shù)據包的方案。原方案在網卡捕獲到數(shù)據包后,
發(fā)表于 09-01 10:09
?9次下載
基于Jpcap的數(shù)據包捕獲器的設計與實現(xiàn)
本文研究了以太網數(shù)據包的捕獲機制,實現(xiàn)了基于JPcap的網絡數(shù)據包捕獲工具,其基本原理是通過調用Jpcap庫捕獲本地網絡上的所有數(shù)據包,然后對數(shù)據包進行協(xié)議解碼,從而可以實
發(fā)表于 01-15 13:47
?38次下載
什么是數(shù)據包?
什么是數(shù)據包?
您在互聯(lián)網上做的一切都涉及到數(shù)據包。例如,您接收的每個網頁都以一系列數(shù)據包的形式傳入,您發(fā)送的每封電子郵件都以一系列數(shù)據包的形式傳出。以
發(fā)表于 08-03 09:13
?1994次閱讀
數(shù)據結構是什么_數(shù)據結構有什么用
數(shù)據結構是計算機存儲、組織數(shù)據的方式。數(shù)據結構是指相互之間存在一種或多種特定關系的數(shù)據元素的集合。通常情況下,精心選擇的數(shù)據結構可以帶來更高
發(fā)表于 11-17 14:45
?1.6w次閱讀
什么是數(shù)據結構?為什么要學習數(shù)據結構?數(shù)據結構的應用實例分析
本文檔的主要內容詳細介紹的是什么是數(shù)據結構?為什么要學習數(shù)據結構?數(shù)據結構的應用實例分析包括了:數(shù)據結構在串口通信當中的應用,數(shù)據結構在按鍵
發(fā)表于 09-26 15:45
?14次下載
網絡數(shù)據包分析軟件wireshark的基本使用
Wireshark(前稱Ethereal)是一個網絡數(shù)據包分析軟件。網絡數(shù)據包分析軟件的功能是截取網絡數(shù)據包,并盡可能顯示出最為詳細的網絡數(shù)據包數(shù)據
NetApp的數(shù)據結構是如何演變的
統(tǒng)一數(shù)據跨分布式資源進行管理,以實現(xiàn)數(shù)據移動的一致性和控制,安全、可見性、保護和訪問。
本文定義了數(shù)據結構及其體系結構,討論了
發(fā)表于 08-25 17:15
?0次下載
如何使用指針數(shù)據包定義數(shù)據緩沖區(qū)
, 只浪費了一個指針域的空間. 數(shù)據包定義 struct point_buffer{ int len; char * data ;}; 數(shù)據結構大小 考慮對齊, 那么數(shù)據結構的大小 >
評論