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

测试一下 结构对齐对其成员访问效率的影响,程序中应该涉及到了对结构成员变量的读/写操作,测试应该是比较全面可信的。
测 试结果表明,改变结构默认的对齐方式对其成员访问效率的影响是蛮大的。另外按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

请按任意键继续. . .

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章