GCC 5.3增加了一个新选项: -fno-semantic-interposition
新的-fno-semantic-interposition选项可用于提高共享库的代码质量,其中不允许插入导出的符号.
这听起来像是对C++项目有用的东西,其中插入不能用于任何原因,但延迟是一个问题.
但是,描述相当模糊.有人能够澄清这个选项是如何工作的吗?
我注意到std::complex使用重载*运算符比使用写出操作要多得多两倍.我看到了50倍的差异.这完全是荒谬的.我知道运算符需要在输入中检查NaN,因为定义了无穷大的复杂程度.这真的能说明50倍的时差吗?
我正在使用带有标志的GCC 5.4.0 -O3 -mavx -mavx2 -msse2 -mfma -mbmi.
这是测试代码:
#include <iostream>
#include <complex>
#include <chrono>
#include <vector>
int main( void ) {
size_t N = 10000;
std::vector< std::complex< double >> inbuf( N );
for( size_t k = 0; k < N; ++k ) {
inbuf[ k ] = std::complex< double >( std::rand(), std::rand() ) / ( double )RAND_MAX - 0.5;
}
std::complex< double > c2 = { 0, 0 };
auto t0 = std::chrono::steady_clock::now(); …Run Code Online (Sandbox Code Playgroud)