結構對齊對結構成員的訪問效率影響的測試。

測試一下 結構對齊對其成員訪問效率的影響,程序中應該涉及到了對結構成員變量的讀/寫操作,測試應該是比較全面可信的。
測 試結果表明,改變結構默認的對齊方式對其成員訪問效率的影響是蠻大的。另外按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

請按任意鍵繼續. . .

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