结构对齐对结构成员的访问效率影响的测试。

测试一下 结构对齐对其成员访问效率的影响,程序中应该涉及到了对结构成员变量的读/写操作,测试应该是比较全面可信的。
测 试结果表明,改变结构默认的对齐方式对其成员访问效率的影响是蛮大的。另外按CPU宽度来测试似乎与默认对齐方式的结果差不多,看来 #pragma pack(1)还是要慎用!!唉~~ 不过要是在 pack(1) 慎用的情况下,做socket 程序时。。。发送或接收数据的结构可怎么写??用 pack(1) 定义socket的收/发数据结构用起来很方便啊。。可是如果为了效率而舍弃的啊?这些数据该规划用什么方式来访问呢?有 比用 pack(1)来定义结构更方遍,更高效的方法吗?




#pragma pack(
1 )

class  Test
{
public:
    
char    a;
    
int        b;
}
;

#pragma pack()



class  Test1
{
public :
    
char a;
    
int b;
}
;


 __declspec(align(
32 ))  class  S 
 

 
public:
     
char a;
     
int b; 
 }
 ;


void  main()
{

    
for(int k = 0; k < 20; k++)
    
{
        Test t;
        t.a 
= 0x33;
        t.b 
= 3;
        
int j = 0;
        
int g = 0;
        DWORD dTick 
= GetTickCount();
        
for(int i = 0; i < 100000000; i++)
        
{
            
if(t.b == g)
            
{
                j
++;
            }


            t.b 
= i;
            g 
= j;
        }


        printf(
"Test0:%d %d  %d ",__alignof(Test),sizeof(Test),GetTickCount() - dTick);


        Test1 t1;
        t1.a 
= 0x33;
        t1.b 
= 3;

        
        dTick 
= GetTickCount();
        
for(int i = 0; i < 100000000; i++)
        
{
            
if(t1.b == g)
            
{
                j
++;
            }


            t1.b 
= i;
            g 
= j;
        }


        printf(
"Test1:%d %d  %d ",__alignof(Test1),sizeof(Test1),GetTickCount() - dTick);

        S t2;
        t2.a 
= 0x33;
        t2.b 
= 3;

        dTick 
= GetTickCount();
        
for(int i = 0; i < 100000000; i++)
        
{
            
if(t2.b == g)
            
{
                j
++;
            }


            t2.b 
= i;
            g 
= j;
        }


        printf(
"Test2:%d %d  %d ",__alignof(S),sizeof(S),GetTickCount() - dTick);


    }

}


输出结果:

Test0:1        5       437
Test1:4        8       125
Test2:32       32      125

Test0:1        5       438
Test1:4        8       125
Test2:32       32      125

Test0:1        5       453
Test1:4        8       125
Test2:32       32      125

Test0:1        5       437
Test1:4        8       125
Test2:32       32      125

Test0:1        5       453
Test1:4        8       125
Test2:32       32      125

Test0:1        5       438
Test1:4        8       125
Test2:32       32      125

Test0:1        5       437
Test1:4        8       125
Test2:32       32      125

Test0:1        5       438
Test1:4        8       125
Test2:32       32      125

Test0:1        5       437
Test1:4        8       125
Test2:32       32      125

Test0:1        5       438
Test1:4        8       125
Test2:32       32      125

Test0:1        5       437
Test1:4        8       125
Test2:32       32      125

Test0:1        5       438
Test1:4        8       125
Test2:32       32      125

Test0:1        5       437
Test1:4        8       125
Test2:32       32      141

Test0:1        5       437
Test1:4        8       125
Test2:32       32      125

Test0:1        5       438
Test1:4        8       125
Test2:32       32      125

Test0:1        5       437
Test1:4        8       125
Test2:32       32      125

Test0:1        5       438
Test1:4        8       125
Test2:32       32      125

Test0:1        5       437
Test1:4        8       125
Test2:32       32      125

Test0:1        5       438
Test1:4        8       125
Test2:32       32      140

Test0:1        5       438
Test1:4        8       125
Test2:32       32      125

请按任意键继续. . .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值