变长结构体用法总结
来源:互联网 发布:淘宝天猫 购物心得 编辑:程序博客网 时间:2024/05/22 01:12
C99允许。结构体最后使用0或1的长度数组的原因,主要是为了方便的管理内存缓冲区,如果你直接使用指针而不使用数组,那么,你在分配内存缓冲区时,就必须分配结构体一次,然后再分配结构体内的指针一次,(而此时分配的内存已经与结构体的内存不连续了,所以要分别管理即申请和释放)而如果使用数组,那么只需要一次就可以全部分配出来,(见下面的例子),反过来,释放时也是一样,使用数组,一次释放,使用指针,得先释放结构体内的指针,再释放结构体。还不能颠倒次序。其实就是分配一段连续的的内存,减少内存的碎片化。
如果定义一个变长结构体?看这个结构体的定义:
typedef struct st_type
{
int nCnt;
int item[0];
}type_a;
(有些编译器会报错无法编译可以改成:)
typedef struct st_type
{
int nCnt;
int item[];
}type_a;
这样我们就可以定义一个可变长的结构,用sizeof(type_a)得到的只有4,就是sizeof(nCnt)=sizeof(int)
那个0个元素的数组没有占用空间,而后我们可以进行变长操作了。
C语言版: type_a *p =(type_a*)malloc(sizeof(type_a)+100*sizeof(int));
C++语言版: type_a *p = (type_a*)newchar[sizeof(type_a)+100*sizeof(int)];
这样我们就产生了一个长为100的type_a类型的东西用p->item[n]就能简单地访问可变长元素,原理十分简单,分配了比sizeof(type_a)多的内存后intitem[0]就有了其意义了,它指向的是intnCnt后面的内容,是没有内存需要的,而在分配时多分配的内存就可以由其来操控,是个十分好用的技巧。
而释放同样简单:
C语言版: free(p);
C++语言版: delete []p;
优点有:
1.结构体无需分配新的存储变长数组的空间;
2.释放比较方便 阅读全文
0 0
- 变长结构体用法总结
- 结构体用法总结
- 结构体用法小结
- 结构体用法详解
- _finddata_t结构体用法
- c语言结构体用法
- c语言结构体用法
- c语言结构体用法
- c语言结构体用法
- c语言结构体用法
- c语言结构体用法
- c语言结构体用法
- Delphi 结构体用法1
- c语言结构体用法
- C语言结构体用法
- C语言结构体用法
- c语言结构体用法
- c语言结构体用法
- [UnityShader]渲染队列、ZWrite和ZTest
- java实现图片与base64字符串之间的转换
- MAPREDUCE中的Combiner
- 制作ubuntu16.04的docker镜像
- 海贼王
- 变长结构体用法总结
- NOIP 2016 蚯蚓(洛谷 P2827)
- 周末总结
- 读书笔记《Effective C++》条款29:为“异常安全”而努力是值得的
- Python笔记(4)----Python面向对象
- SuperMap杯全国高校GIS大赛-三维应用组学习资料
- L1、L2、MMU、TLB物理关系 && 进程栈和内核栈 && Cache与主存关联
- 文本分类实战--从TFIDF到深度学习(附代码)
- Spring整合CXF