编译器资源管理器表示程序在循环中调用frexp
。
这是否意味着编译器没有内联frexp
的代码?
代码是用g++ -Ofast -march=native
测试(c ++):
#include <Eigen/Eigen>
using namespace Eigen;
void log2_extract_mantissa(ArrayXXf& x) {
// rip mantissa out of floats and store the result as int in-place.
std::int32_t* int_data = reinterpret_cast<std::int32_t*>(x.data());
for(Index i = 0; i < x.size(); ++i) {
std::frexp(x.data()[i], int_data + i);
}
}
组装:
...
.L3:
vmovss xmm0, DWORD PTR [rax+rbx*4]
lea rdi, [r12+rbx*4]
call frexpf
mov rax, QWORD PTR [rbp+16]
inc rbx
imul rax, QWORD PTR [rbp+8]
cmp rbx, rax
jl .L7
...
答案 0 :(得分:4)
不,不是。
call frexpf
是对frexpf
的函数调用。