在C中将浮点指针重新设置为双指针的最有效方法是什么?

时间:2014-04-16 20:45:08

标签: c++ objective-c c objective-c++

我在代码中使用DSP,它是目标C ++和C的混搭。

CoreAudio框架为我提供了音频样本数据缓冲区作为浮点指针

e.g。 float *bufferData = (float *)malloc(sizeof(float) * 1024);

我要求对样本数据进行处理的C函数需要一个 double 类型的指针。

double returnAValue(double *sampleData, int samplecount);

在将浮点指针传递给此函数之前,将浮点指针转换为双指针的最有效CPU方法是什么?

2 个答案:

答案 0 :(得分:4)

Accelerate框架提供的众多功能之一是vDSP_vspdp,您可以这样使用:

float * singleBuf;
float * doubleBuf = malloc(nElements * sizeof(double));
vDSP_vspdp(singleBuf, 1, doubleBuf, 1, nElements);

如果您在Mac上进行任何类型的DSP编程,您可以通过了解vDSP,CBLAS和其他Accelerate框架API来节省大量时间并获得大量效率。这些API倾向于通过处理器的向量单元(SSE等)并了解内存提示,因此它们往往比您通常手动编码的效率更高。

答案 1 :(得分:3)

更改指针类型不会更改基础数据的类型。如果您尝试将两个希望缓冲区中包含不同内容的包链接在一起,则必须将数据从一个缓冲区复制到另一个缓冲区,然后进行转换。

所以你的问题是:给定一个充满浮动的缓冲区,你如何将它转换为一个充满双打的缓冲区?一个简单的for循环可能是你最好的选择。