c语言、c++扩展介绍 ————柔性数组、零长数组。

简介: 零长数组做为一种 GNU 的语法扩展方式,为数据处理提供优化支持。因为编译器的编译特性,这种声明方式,只是一个指向固定位置的偏移量常量,为什么要使用零长数组

注意: 一下所有的讨论都是基于结构体内部而言的,并不是单独拿出来的情境下的结论。


  1. 零长数组是什么?
  2. 零长数组做为一种 GNU 的语法扩展方式,为数据处理提供优化支持。
  3. 因为编译器的编译特性,这种声明方式,只是一个指向固定位置的偏移量常量,


  1. 为什么要使用零长数组
  2. 使用零长数组,有两个方面的考虑:避免空间浪费 (这是相对于定长数组)
  3. 内存连续使用,对于使用索引访问优化效率提供帮助(这是相对与指针数组)


  1. 怎么使用零长数组?
  2. 零长数组作为 GNU 在标准c/c++ 之上的扩展,是支持 C语言 和 c++ 语言的
  3. 使用时需要在最后定义。
  4. 本质是将指针越界的问题,合理化的扩展应用。
  5. 具体使用方式

声明时:char chBuffer[0] 具体实例

struck myInfo{
...
int iLen;
char chBuffer[0];
}


  1. 使用时: 需要在申请堆空间时添加需要长度的额外内容 具体实例
...
 if(zeroBuffer = (struck myInfo*)malloc(sizeof(struck myInfo) + sizeof(char)*NEED_DATA_LEN){
  zeroBuffer->len = NEED_DATA_LEN;
  memset(zeroBuffer->chBuffer, 0x00,NEED_DATA_LEN);
  return zeroBuffer;
 }
 ...


6释放时只需要一次 free 就可。(因为连续内存,不会造成内存泄露 “针对指针数组而言“) 具体实例:

...
  if(zeroBuffer != NULL){
      free(zeroBuffer);
      zeroBuffer = NULL;
  }
  ...


  1. 应用场景:
  2. 接受数据的具体内容长度不定。
  3. 要求索引访问数据块
  4. 期望提升 访问速度的场景。

扩展思考:

如果系统内海量的使用 ,并且处理流程被拉的过长,会有什么问题?

  1. 海量使用会让数据大量堆积在内存中,如果过量,会影响其他服务的正常处理。
  2. 怎么处理:使用Io复用;扩展存储到磁盘;优化数据处理流程;中间过程文件先保存,后续处理直接接替;

能否复用?

  1. 如果数据大致有一个使用长度范围的情况下,可以。
  2. 但是在这种情况下,直接使用定长数据也可以。
  3. 如果数据过大,也可以使用指针。

这种申请释放的模式 适合频繁使用吗?

  1. 其实STL 底层 也有这种思想的体现,比如 vector
  2. 这部分的资源使用,我们是可以接受的。
  3. 柔性数组的类型是固定的吗
  4. 不是的,之所以使用char 是因为他的长度是一个字节,对于数据存储更方便。
  5. 如果能够明确 数据传输时 以4字节为最小单位的时候, 那么int 类型也是可以的。

服务器高级架构体系:https://xxetb.xet.tech/s/4DEnTI

目录
相关文章
|
15小时前
|
存储 C++ 索引
c++数组
c++数组
8 2
|
3天前
|
存储 搜索推荐 算法
C语言中的数组:深入理解与应用
C语言中的数组:深入理解与应用
|
3天前
|
C语言
C语言基础 - 字符串/字符数组最易错考点
该文探讨了C语言中'\0'字符对字符串和字符数组的重要性,以及`strlen`和`sizeof`的区别。'\0'作为字符串的结束标志,确保了正确打印和计算字符串长度。示例代码显示,未包含'\0'的字符数组打印时可能出现随机值。`strlen`计算字符串长度,不包含'\0',而`sizeof`返回变量或数组的总字节数,包括'\0'。文章还提醒注意转义字符在字符串中的影响,例如`\t`和`\62`。最后总结了字符串和字符数组处理时应注意的要点。
15 0
C语言基础 - 字符串/字符数组最易错考点
|
3天前
|
存储 安全 编译器
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
10 0
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
|
4天前
|
C语言
C语言期末习题之数组逆序存放
C语言期末习题之数组逆序存放
13 0
|
4天前
|
存储 算法 搜索推荐
C语言数组
C语言数组
11 3
|
4天前
|
存储 C语言
c语言数组的概念与使用
c语言数组的概念与使用
12 1
|
4天前
|
存储 C++
C++指针数组
C++指针数组
13 1
|
4天前
|
存储 C++ 索引
C++数组
C++数组
11 0
|
5天前
|
C++
C++ 重载 数组对象输入输出流的实现!!!
C++ 重载 数组对象输入输出流的实现!!!