今天在重构自己的代码时发现了其中有大量的CString 的 Format调用,突然想到Format与直接赋值(=)效率对比。
猜想,应该是 赋值 效率高,第一感觉是 Format是明显的函数调用,但是赋值也包含自复制函数,是否会影响效率。实验验证一下。
VS2010编译:源码
CString mystr = "Mydemo";
CString strTest;
strTest.Format("%s", mystr);
strTest = mystr;
对比 Format 与 赋值= 汇编:
38: strTest.Format("%s", mystr);
002C156A 8B F4 mov esi,esp
002C156C 8B 45 D4 mov eax,dword ptr [mystr]
002C156F 50 push eax
002C1570 68 70 88 2C 00 push offset string "%s" (2C8870h)
002C1575 8D 4D C8 lea ecx,[strTest]
002C1578 51 push ecx
002C1579 FF 15 1C C4 2C 00 call dword ptr [__imp_ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char> > >::Format (2CC41Ch)]
002C157F 83 C4 0C add esp,0Ch
002C1582 3B F4 cmp esi,esp
002C1584 E8 07 FC FF FF call @ILT+395(__RTC_CheckEsp) (2C1190h)
39: strTest = mystr;
002C1589 8B F4 mov esi,esp
002C158B 8D 45 D4 lea eax,[mystr]
002C158E 50 push eax
002C158F 8D 4D C8 lea ecx,[strTest]
002C1592 FF 15 20 C4 2C 00 call dword ptr [__imp_ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char> > >::operator= (2CC420h)]
002C1598 3B F4 cmp esi,esp
002C159A E8 F1 FB FF FF call @ILT+395(__RTC_CheckEsp) (2C1190h)
一目了然