【发布时间】:2018-09-12 04:46:31
【问题描述】:
memcpy() 据我所知,通常实现为循环:
// Pseudo code - for illustration only
while(len--)
++*dst=++*src;
使用所有可用的 CPU 寄存器不是更有意义吗?!至少对于大副本?!
// Pseudo code - for illustration only
register srcA,dstA
register srcB,dstB
register srcC,dstC
while(len-=numreg)
{
*dstA=*srcA;
*dstB=*srcB;
*dstC=*srcC;
}
所以问题是。 memcpy() 实现是否专门考虑了可用寄存器,还是留给编译器?!
【问题讨论】:
-
如果您想知道,请使用 memcy() 并让编译器为您生成一个 .S 文件。或者在反汇编的调试器中跟踪它。我打赌你会看到各种各样的寄存器被使用。老实说,你几乎不想像以前那样编写代码。使用 std::memcpy() 并让优化器进入城镇,或者将一个结构分配给另一个结构,让优化器使用寄存器或 memcpy() 处理它。在这些情况下,它的判断力非常好 - 几乎比任何工程师都能诚实地判断。
-
"// 伪代码 - 仅用于说明" => "// 不可读的代码 - 仅用于说明"。这个问题没有意义。您认为 memcpy 是世界上每个程序都使用的核心功能,并没有在使用编译器的标准库中进行优化?
-
我能读懂。写得不好,但我明白了它背后的想法......
标签: c optimization implementation memcpy cpu-registers