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