何故*l=*kが二回ある。
そもそもおまいがやってるのはstrcpy()じゃなくてmemcpy()。
速度が違って当然。
strcpyのロジックは
while(*k++ = *l++){}で十分だ。
余計なことしすぎ。
テンプレート化してみろ。
組み込みランタイムとの比較もしてみろ。
その程度じゃ何も検証できてないのと同じだぞ。
出直して来い。