指針數據包
相信大多數人會將定長數組換為 指針 , 每次使用時動態的開辟 CURR_LENGTH 大小的空間, 因為這樣可以避免造成 MAX_LENGTH - CURR_LENGTH 空間的浪費, 只浪費了一個指針域的空間.
- 數據包定義
struct point_buffer
{
int len;
char *data;
};
- 數據結構大小
考慮對齊, 那么數據結構的大小 >= sizeof(int) + sizeof(char *)
- 數據包創建
但是在開辟內存時, 需要調用兩次malloc ,第一次給結構體分配內存,第二次給成員data分配內存:
if ((pbuffer = (struct point_buffer *)malloc(sizeof(struct point_buffer))) != NULL)
{
pbuffer- >len = CURR_LENGTH;
if ((pbuffer- >data = (char *)malloc(sizeof(char) * CURR_LENGTH)) != NULL)
{
memcpy(pbuffer- >data, "Hello World", CURR_LENGTH);
printf("%d, %sn", pbuffer- >len, pbuffer- >data);
}
}
- 釋放
釋放也需要調用兩次free函數 ,先釋放數據域指針,再釋放結構體指針:
/// 銷毀
free(pbuffer- >data);
free(pbuffer);
pbuffer = NULL;
- 優點 :不會造成空間的大量浪費,只多使用了一個指針大小的空間
- 缺點 :開辟空間時需要額外開辟數據域的空間,釋放時也需要先釋放數據域的空間。假如用戶不知道這個數據包創建的具體細節,有可能會只釋放結構體指針,不釋放數據域指針。因此容易造成內存泄露。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C語言
+關注
關注
183文章
7644瀏覽量
145569 -
指針
+關注
關注
1文章
484瀏覽量
71843 -
數據包
+關注
關注
0文章
269瀏覽量
25594
發布評論請先 登錄
相關推薦
熱點推薦
使用UART FIFO緩沖區時,緩沖區中的數據有時會損壞的原因?
我在使用 UART FIFO 緩沖區時遇到了以下問題。
問題描述:
當通過兩個 UART 通道使用完整的 UART FIFO 緩沖區并通過兩個通道進行通信時,緩沖區中的數據有時會損壞,
發表于 03-06 06:59
ESP8266有雙緩沖區嗎?
我想實時傳輸一些信號的測量數據。信號的采樣周期為 1 ms。我想每 500 毫秒發送 2048 字節(一個數據包)。ESP8266有雙緩沖區(2x 2048字節)嗎?其想法是計數填充一個緩沖區
發表于 07-16 07:29
基于ARM和FPGA的環形緩沖區接口設計方案
公司的V5系列SX95T型FPGA組成。物理層最高速率為1Mb/s,通過變化來自應用層的數據包大小和的間隔來改變用戶速率,用以測試ARM和FPGA的數據緩沖區和匹配功能。實際測試和運行表明,此方案
發表于 05-30 05:00
如何檢測數據包丟失?
您好,我想做一個回環字體(發送一個IP地址和MAC地址反轉的rx包),具有最好的性能(這是對網絡段進行速度測試)。我可以將rx緩沖區切換到tx緩沖區(以避免復制包)嗎?你能給我一個源代
發表于 03-13 08:56
一文讀懂路由器緩沖區大小的重要性
對于網絡而言,數據包在網線上的時候,絕對安全,絕對是全速前進,最危險的就是到達轉發設備內部,設備處理數據包帶來的固有延遲導致數據包必須有機會被緩沖,處理加速比一定要和
發表于 10-15 09:47
?5043次閱讀
STM32串口數據接收 --環形緩沖區
STM32串口數據接收 --環形緩沖區環形緩沖區簡介??在單片機中串口通信是我們使用最頻繁的,使用串口通信就會用到串口的數據接收與發送,環形緩沖區
發表于 12-28 19:24
?31次下載
數據包的發送流程
一個數據包,從聊天框里發出,消息會從聊天軟件所在的用戶空間拷貝到內核空間的發送緩沖區(send buffer),數據包就這樣順著傳輸層、網絡層,進入到數據鏈路層,在這里
零長數組如何使用定長包定義數據緩沖區
零長數組 請先思考以下問題: C語言中,數組長度是否可以為0? 如果要接收一個不定長數據包,你會如何定義數據緩沖區? 第一個問題 : 在標準C語言中,沒有長度為0的數組,但在 GNU
變長數據包數據結構定義
用方便的呢? GNU C 的0長度數組(變長數組/柔性數組)就是這樣一個擴展. 對于 0長數組 的這個特點,很容易構造出變成結構體,如緩沖區,數據包等等: 數據結構定義 // 0長度數
C++環形緩沖區設計與實現
一、環形緩沖區基礎理論解析(Basic Theory of Circular Buffer) 1.1 環形緩沖區的定義與作用(Definition and Function of Circular
交換機與路由器緩沖區:尋找完美大小
學術界和工業界一直備受爭議。本文探討了高端路由器中數據包緩沖的歷史和演變,以期概述當前的實踐和未來的趨勢。 網絡芯片中的緩沖區 在典型的路由器/交換機 ASIC 中,會發現三種類型的數據包
如何使用指針數據包定義數據緩沖區
評論