1. 程式人生 > >Vpp原始碼分析之 vec_len 巨集的理解

Vpp原始碼分析之 vec_len 巨集的理解

在VPP程式碼中我們經常遇到地方使用vec_len的巨集,但是不確定為什麼就可以這樣使用。自己在環境上除錯了一下,就理解了。
1、vec變長長陣列(data-plane\hdp\hdpinfra\hdpinfra\vec_bootstrap.h)

在這裡插入圖片描述

/*******![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20181121102144956.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzaDEzNDE3,size_16,color_FFFFFF,t_70)******************************************************************
 > File Name: test.c
 > Author:  jinshaohui
 > Mail:    
[email protected]
> Time: 18-11-20 > Desc: ************************************************************************/ #include<stdio.h> #include<stdlib.h> typedef struct { int len; char data[0]; }vec_header_t; #define _vec_find(v) ((vec_header_t *) (v) - 1) #define _vec_len(v) (_vec_find(v)->len) #define vec_len(v) ((v) ? _vec_len(v) : 0) int main() { vec_header_t *p = NULL; int *p1 = NULL; p = malloc(sizeof(vec_header_t) + 10 * sizeof(int*)); p->len = 12; p1 = (int*)p->data; printf("\r\n %x %x %x",p,((vec_header_t*)p1),_vec_find(p1)); printf("\r\n p->len: %d \r\n",vec_len(p1)); printf("\r\n sizeof(vec_header_t):%d",sizeof(vec_header_t)); return 0; }

執行結果如下:
在這裡插入圖片描述