歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

淺談結構體及Linux下內存分配原則

結構體在程序中的應用是很廣泛的,要處理的問題越復雜,數據量越多月雜,就越需要用到結構體。比如網絡,內核,驅動等等。熟練使用結構體對每個程序員都是至關重要的。一個好的結構體不僅能使程序體系結構清晰,而且使得操作靈活,可擴展性強。linux網絡之所以很強大,這和它裡設計合理的數據結構有很大關系。

結構體定義:

  1. struct a{  
  2.     int xx:4;  
  3.     int yy:4;  
  4. };

結構體初始化:

方式一:

  1. struct a aa ={  
  2.     xx:2,  
  3.     yy:3  
  4. };

方式二:

  1. struct a cc ={  
  2.     .xx=6,  
  3.     .yy=1,  
  4. };

方式三:

struct a dd={4,2};

在定義中,可以限制變量的位的作用域,比如上面的:int xx:4;這表明xx的有效域只有4位,也就是能給他賦值的最大值為15,如果超過這個值,編譯器就會報錯:warning: overflow in implicit constant conversion。

在這裡如果你給xx賦值為15,如:

  1. struct a cc ={  
  2.     .xx=15,  
  3.     .yy=1,  
  4. };

然後輸出:

printf("cc.xx = %d\n",cc.xx);

結果會是:-1

因為這裡定義的xx為int 型,15的二進制位1111,最高位為1,表示為負數,所以取反加1後為0001。所以是-1。

這種位域操作的好處是當你不需要用到你定義的類型的長度時,可以加位域操作以節省內存空間。

Copyright © Linux教程網 All Rights Reserved