C++ 有可能为fftw使用共享内存吗?

C++ 有可能为fftw使用共享内存吗?,c++,arrays,pointers,memory-management,fftw,C++,Arrays,Pointers,Memory Management,Fftw,我有一个用傅里叶变换实现的数值计算问题。我使用fftw来实现FFT,但是FFTed的信号非常奇怪。一半信号来自一个阵列,另一半信号来自另一个阵列。在当前代码中,我只是复制数据 #include <iostream> #include <vector> #include <complex> #include <fftw3.h> using namespace std; void main(void) { std::vector< std

我有一个用傅里叶变换实现的数值计算问题。我使用fftw来实现FFT,但是FFTed的信号非常奇怪。一半信号来自一个阵列,另一半信号来自另一个阵列。在当前代码中,我只是复制数据

#include <iostream>
#include <vector>
#include <complex>
#include <fftw3.h>

using namespace std;

void main(void)
{
  std::vector< std::complex<double> > V1(4);
  std::vector< std::complex<double> > V2(4);
  std::vector< std::complex<double> > V(8);

  for (int i=0; i<4; i++) V[i] = V1[i] = std::complex<double>(i, i);
  for (int i=0; i<4; i++) V[i+4] = V2[i] = std::complex<double>(i+4, i+4);

  fftw_complex* in = reinterpret_cast<fftw_complex*>(&V[0]);
  fftw_plan plan = fftw_plan_dft_1d(8, in, in, FFTW_FORWARD, FFTW_MEASURE);
  fftw_execute(plan);
}
#包括
#包括
#包括
#包括
使用名称空间std;
真空总管(真空)
{
std::vectorV1(4);
std::vectorV2(4);
std::vectorV(8);

对于(int i=0;i,如果我理解正确,则需要取两个单独的向量对象:

vector<fftw_complex> V1, V2;
当然,这在您的程序中可能可行,也可能不可行。 您的第二个代码段有一个主要问题:

fftw_complex *in[8];
定义一个由8个指向复数的指针组成的数组,而不是一个由8个复数组成的数组,因此它不能作为
fftw\u plan\u dft\u 1d
的输入,即使它这样做了,结果也毫无意义,
因为您向它提供的是一系列内存地址,而不是数据。

如果我理解正确,您需要获取两个单独的向量对象:

vector<fftw_complex> V1, V2;
当然,这在您的程序中可能可行,也可能不可行。 您的第二个代码段有一个主要问题:

fftw_complex *in[8];
定义一个由8个指向复数的指针组成的数组,而不是一个由8个复数组成的数组,因此它不能作为
fftw\u plan\u dft\u 1d
的输入,即使它这样做了,结果也毫无意义,
因为你给它输入的是一系列内存地址而不是数据。

你是如何输入数据的?你能先构造一个向量而不是另一个向量吗?我想问的是:你是否有责任构造V1和V2?你是如何输入数据的?你能先构造一个向量而不是另一个向量吗?我想问的是:你的是否可以构造V1和V2?谢谢。我明白了。但不幸的是,数组是由其他代码返回的,它是std::vector,我无法将其指向指针:(谢谢。我明白了。但不幸的是,数组是由其他代码返回的,它是std::vector,我无法将其指向指针:(
fftw_complex *in[8];