gpt4 book ai didi

c++ - FFTW : how to prevent breaking aliasing rules?

转载 作者:太空狗 更新时间:2023-10-29 23:17:23 29 4
gpt4 key购买 nike

我有一个使用 std::complex<double> 的代码类型。来自 FFTW Manual :

if you have a variable complex<double> *x, you can pass it directly to FFTW via reinterpret_cast<fftw_complex*>(x).

但是,当我在我的代码中这样做时:

tmp_spectrum = reinterpret_cast<std::complex<double>*>(fftw_alloc_complex(conf.spectrumSize()));
plan_bw_temp = fftw_plan_dft_c2r_1d(conf.FFTSize(), reinterpret_cast<fftw_complex*>(tmp_spectrum), tmp_out, FFTW_ESTIMATE);

我得到 dereferencing type-punned pointer might break strict-aliasing rules [-Wstrict-aliasing] .如何解决这个警告?谢谢!

最佳答案

这里有三个选项:

  • 只需在需要时创建一个fftw_complex:fftw_plan_dft_c2r_1d(conf.FFTSize(), fftw_complex(tmp_spectrum.real(), tmp_spectrum.imag()), tmp_out, FFTW_ESTIMATE);
  • 不要在代码中使用 C++ 语言的复杂类型,而只使用 fftw_complex 类型。
  • 使用 -fno-strict-aliasing 在适当的翻译单元中禁用所有严格别名优化和强制执行。仅使警告静音安全,因为它可能会导致代码损坏。

关于c++ - FFTW : how to prevent breaking aliasing rules?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18408673/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com