|
|

楼主 |
发表于 2005-6-30 10:33:03
|
显示全部楼层
Post by dieken_qfz
像 T a[0];这样的东西,第一,可以自动申请到一块内存(sizeof(T)),第二,可以方便的使用
一个指针a.
// 说错了, 应该是T a[1]这样的用法
我猜这个域是用来判断ip包的负载类型并且引用负载数据, 比如一个包含了tcp数据的ip包
xxxxxxxxxxYzzzzzzzzzzzzzz
\-------------/ \----------------/
ip-header ip-payload(tcp)
这样用payload[0]可以判断这个负载的类型, 而且可以用payload[1] ... payload[data_len]
引用tcp包, 中间不用为了一个char而跑到堆中单独分配一次内存, 又要释放. - #include <stdio.h>
- int
- main(void)
- {
- char a[0];
- char b[1];
- printf("size of type is %d\n", sizeof(char));
- printf("a[0] sizeof is %d\nb[1] sizeof is %d\n", sizeof(a),sizeof(b));
- exit(0);
- }
复制代码
dieken_qfz兄那个T a[0]申请的内存大小不是sizeof(T),而是0,应该说是申请到一个指针,指针指的T对象大小为零.
Tetries兄弟的这个写法:
ipq_packet_msg_t *packet = malloc(offsetof(ipq_packet_msg_t) + payload_size);
应该是ipq_packet_msg_t *packet = malloc(offsetof(ipq_packet_msg_t,payload[1]) + payload_size);
这样可以在payload[1]....payload[payload_size]里保存IP包
但我们会在payload[0]里保存什么呢? :ask |
|