我使用 memcpy 来复制可变大小的数据和固定大小的数据。在某些情况下,我会复制少量内存(只有少数字节)。在 GCC 中,我记得 memcpy 曾经是一个内在的/内置的。但是(使用 valgrind)分析我的代码时,我看到数千次调用 glibc 中的实际“memcpy”函数。
使用内置函数需要满足哪些条件?我可以快速推出自己的 memcpy,但我确信内置比我能做的更有效。
注意:在大多数情况下,要复制的数据量可用作编译时常量。
CXXFLAGS:-O3 -DNDEBUG
我现在使用的代码,强制内置,如果你去掉 _内置前缀,则不使用内置。这是使用 T=sizeof(type) 从各种其他模板/函数调用的。使用的大小是 1、2、4 的倍数、几个 50-100 字节大小以及一些更大的结构。
template<int T>
inline void load_binary_fixm(void *address)
{
if( (at + T) > len )
stream_error();
__builtin_memcpy( address, data + at, T );
at += T;
}