struct结构一方面能够加强对变量的管理,增加程序的可读性,但是另一方面,结构体也会加大程序的开销。
看下面一段代码:
struct TEST_S { int a; int b; float c; }; int _tmain(int argc, _TCHAR* argv[]) { TEST_S ts; int a; int b; int c; ts.a = 100; ts.b = 200; ts.c = 300.f; a = 100; b = 200; c = 300.f; return 0; }
使用反汇编工具,
<strong><span style="font-size:18px;"></span></strong><pre name="code" class="cpp"> ts.a = 100; ts.b = 200; ts.c = 300.f;
给结构体3个变量赋值,实际上在Debug下汇编代码为:
mov dword ptr [ts],64h mov dword ptr [ebp-0Ch],0C8h movss xmm0,dword ptr ds:[0BA5858h] movss dword ptr [ebp-8],xmm0
从汇编代码中可以看出,除了结构体的第一个变量外,接下来的变量就需要在结构体的头地址的基础上加上偏移量,而非结构体的情况如下:
a = 100; b = 200; c = 300.f;
其汇编代码如下:
mov dword ptr [a],64h mov dword ptr [b],0C8h mov dword ptr [c],12Ch
明显少了一步地址减法。
但是在Release情况下,编译器默认对程序进行优化,由于优化下的汇编代码无法查看,所以无法查清其实际开销情况。
时间: 2024-10-10 23:22:16