#include <iostream.h>
#include <utility>
inline unsigned __int64 GetCycleCount()
{
__asm _emit 0x0F
__asm _emit 0x31
}
inline void exchange1 (int& a, int& b)
{
a^=b;
b^=a;
a^=b;
}
inline void exchange2 (int& a, int& b)
{
int c = a;
a = b;
b = c;
}
inline void exchange3 (int& a, int& b)
{
a+=b;
b=a-b;
a-=b;
}
void main()
{
int a = 123, b = 456, i;
unsigned __int64 start = GetCycleCount ();
for (i = 0; i < 0xFFFFFF; ++i)
exchange1 (a, b);
cout<<"exchange1 use time: "<<(unsigned int) (GetCycleCount() - start)<<endl;
start = GetCycleCount ();
for (i = 0; i < 0xFFFFFF; ++i)
exchange2 (a, b);
cout<<"exchange2 use time: "<<(unsigned int) (GetCycleCount() - start)<<endl;
start = GetCycleCount ();
for (i = 0; i < 0xFFFFFF; ++i)
exchange3 (a, b);
cout<<"exchange3 use time: "<<(unsigned int) (GetCycleCount() - start)<<endl;
start = GetCycleCount ();
for (i = 0; i < 0xFFFFFF; ++i)
std::swap (a, b);
cout<<"std::swap use time: "<<(unsigned int) (GetCycleCount() - start)<<endl;
}
result:
exchange1 use time: 614668536
exchange2 use time: 433977184
exchange3 use time: 604471614
std::swap use time: 428120029
std版的swap:
// TEMPLATE FUNCTION swap (from <algorithm>)
template<class _Ty> inline
void swap(_Ty& _Left, _Ty& _Right)
{ // exchange values stored at _Left and _Right
_Ty _Tmp = _Left;
_Left = _Right, _Right = _Tmp;
}
#include <utility>
inline unsigned __int64 GetCycleCount()
{
__asm _emit 0x0F
__asm _emit 0x31
}
inline void exchange1 (int& a, int& b)
{
a^=b;
b^=a;
a^=b;
}
inline void exchange2 (int& a, int& b)
{
int c = a;
a = b;
b = c;
}
inline void exchange3 (int& a, int& b)
{
a+=b;
b=a-b;
a-=b;
}
void main()
{
int a = 123, b = 456, i;
unsigned __int64 start = GetCycleCount ();
for (i = 0; i < 0xFFFFFF; ++i)
exchange1 (a, b);
cout<<"exchange1 use time: "<<(unsigned int) (GetCycleCount() - start)<<endl;
start = GetCycleCount ();
for (i = 0; i < 0xFFFFFF; ++i)
exchange2 (a, b);
cout<<"exchange2 use time: "<<(unsigned int) (GetCycleCount() - start)<<endl;
start = GetCycleCount ();
for (i = 0; i < 0xFFFFFF; ++i)
exchange3 (a, b);
cout<<"exchange3 use time: "<<(unsigned int) (GetCycleCount() - start)<<endl;
start = GetCycleCount ();
for (i = 0; i < 0xFFFFFF; ++i)
std::swap (a, b);
cout<<"std::swap use time: "<<(unsigned int) (GetCycleCount() - start)<<endl;
}
result:
exchange1 use time: 614668536
exchange2 use time: 433977184
exchange3 use time: 604471614
std::swap use time: 428120029
std版的swap:
// TEMPLATE FUNCTION swap (from <algorithm>)
template<class _Ty> inline
void swap(_Ty& _Left, _Ty& _Right)
{ // exchange values stored at _Left and _Right
_Ty _Tmp = _Left;
_Left = _Right, _Right = _Tmp;
}
-------------------------------------------------------------------------------------------
- 0 error(s), 0 warning(s)