指針數據包
相信大多數人會將定長數組換為 指針 , 每次使用時動態的開辟 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語言
+關注
關注
180文章
7542瀏覽量
131032 -
指針
+關注
關注
1文章
474瀏覽量
70386 -
數據包
+關注
關注
0文章
231瀏覽量
24136
發布評論請先 登錄
相關推薦
使用UART FIFO緩沖區時,緩沖區中的數據有時會損壞的原因?
我在使用 UART FIFO 緩沖區時遇到了以下問題。
問題描述:
當通過兩個 UART 通道使用完整的 UART FIFO 緩沖區并通過兩個通道進行通信時,緩沖區中的數據有時會損壞,
發表于 03-06 06:59
緩沖區中數據如何轉換成數組
各位高手,請問下我從儀器中讀取出來數據到緩沖區后,如何能把這些數據轉換成一個數組,格式應該怎樣去轉換。。。。半天也弄不出來 幫幫忙吧先謝謝大家了。。。緩沖區的
發表于 02-22 17:05
攝像頭采集到的數據遠遠超過了發送緩沖區的數據,可以不用緩沖區嗎?
做了一個攝像頭的實驗,用的是stm32f103,MCU把攝像頭采集到的數據通過串口發送到PC。但我現在比較糊涂的是,攝像頭采集到的數據遠遠超過了發送緩沖區的數據,可以不用
發表于 11-05 22:06
杰杰帶你解讀【機智云】環形緩沖區源碼
= NULL; rb->rbCapacity = 0;return 0;}把這些指針指向NULL,但是環形緩沖區本身地址的數據是不會被清除的,只是表明了這些地址可以被重復使用了而已
發表于 07-17 14:58
MCU進階之串口環形緩沖區實現
測試數據沒有發生丟包現象。補充對于現在的階段,杰杰我本人寫代碼也慢慢學會規范了。所有的代碼片段均使用了可讀性很強的,還有可移植性也很強的。我使用了宏定義來決定是否開啟環形緩沖區的方式來
發表于 08-17 13:11
STM32串口環形緩沖區的實現
一個數組,只不過有兩個指針,一個指向列隊頭,一個指向列隊尾。指向列隊頭的指針(Head)是緩沖區可讀的數據,指向列隊尾的指針(Tail)是
發表于 10-16 11:40
在fpga中緩沖和切換緩沖區大小應該是多少?
嗨,我正在以一個頻率連續地以隨機順序接收數據包,并且我想要以相同/不同的頻率按順序緩沖和輸出它們。正常的FIFO不起作用,因為數據包不會是“先進先出”,緩沖區大小應該是多少?有什么線索
發表于 02-28 09:46
基于ARM和FPGA的環形緩沖區接口設計方案
公司的V5系列SX95T型FPGA組成。物理層最高速率為1Mb/s,通過變化來自應用層的數據包大小和的間隔來改變用戶速率,用以測試ARM和FPGA的數據緩沖區和匹配功能。實際測試和運行表明,此方案
發表于 05-30 05:00
如何檢測數據包丟失?
您好,我想做一個回環字體(發送一個IP地址和MAC地址反轉的rx包),具有最好的性能(這是對網絡段進行速度測試)。我可以將rx緩沖區切換到tx緩沖區(以避免復制包)嗎?你能給我一個源代
發表于 03-13 08:56
請問串口的DMA接收緩沖區是不是環形緩沖區
大家好!請問串口的DMA接收緩沖區是不是環形緩沖區?通過閱讀串口部分的代碼,我了解到這樣幾點:1、串口的DMA接收時循環接收,當緩沖區滿了會重新從頭開始覆蓋掉之前的數據,和環形
發表于 08-30 14:27
嗅探器的最佳緩沖區wifi設置是什么?
我使用 esp32 作為 wifi 802.11 數據包嗅探器,使用混雜模式。該設備專用于此目的,因此我想要一個能夠最大化嗅探器性能的 wifi 配置。嗅探器的最佳緩沖區設置是什么?
發表于 03-01 06:53
變長數據包數據結構定義
用方便的呢? GNU C 的0長度數組(變長數組/柔性數組)就是這樣一個擴展. 對于 0長數組 的這個特點,很容易構造出變成結構體,如緩沖區,數據包等等: 數據結構定義 // 0長度數
評論