高手在采集数据时是怎样开辟内存和建立数组的,该怎么解决

高手在采集数据时是怎样开辟内存和建立数组的
高手 您能讲讲从采集卡读数据,将数据存到数组,处理,是采用什么方法吗

我写的,方法很笨 ,有错误请高手指点一下:
1 DataBuf=(float *) malloc((NumChn*NumSamp+1)*sizeof(float)); // 申请数据缓冲区
2 DataBuf=SampleData()// 从采集板读数据
  
3 分给数组 (我这个采集频率挺高(10000hz,不知用普通数组可不可以)
 for(int i=0;i<120(每个通道采样点数);i++) // 感觉下面试错的,高手能指点一下
{
  for(int j=0;j<3(表示3个通道);j++)

  data[j][i]=DataBuf[1+i*3+j];
  }

请问高手:是如何开辟内存,建立数组,建立共享内存

------解决方案--------------------
用全局变量就可以了,频繁申请内存会产生内存碎片等弊端
------解决方案--------------------
第二步明显有问题(内存泄漏),我想SampleData()一定是返回一个指针.不需要第一步的分配,可以直接开始第二步.
------解决方案--------------------
采集的缓存是全局的,程序一启动就申请好了,一般是2的整数次方大小,比如1兆,2兆16兆,64兆等等。

俺习惯使用循环缓冲

int pos = 0;

recvbuf[ pos++ ] = 接收到的数据;

如果缓冲大小是 64兆 ,那么 pos &= 0x3FFFFFF;

对应的还有一个读指针,范围也是从0 到 0x3FFFFFF;

当读写指针一致时表示没有数据,当写指针紧跟着读指针时表示缓冲区满了。

俺一般建一个足够大的缓冲,这样接收线程可以毫无顾忌的接收,然后再多开几级线程用来物理这些数据
俺有一个设备,硬件有128字节的缓存,1级接收线程有1兆缓存,二级线程循环整理1兆缓存的数据,整理成数据包,3级线程负责显示到屏幕上,最多时有100多K的数据被缓存,没有数据的时候,屏幕还在显示这些数据,直到显示完毕或停止显示。