2016年2月19日 星期五

LibreOffice 5正式支援Win10

LibreOffice 5正式支援Win10,推出原生64位元視窗版軟體

在2015年8月,LibreOffice推出5.0大改版,目前已經發行第4個修正版本5.0.4,大致趨於穩定,而另一方面,也代表前一個分支4.4將要結束產品生命周期,不再提供任何支援與修正。最近新的LibreOffice 5.1分支,已經進入候選版本的階段,目前已經推出第二個候選版(RC2),正式版則預計在2月初上市。

而對於現有的平臺,LibreOffice 5.0正式支援Windows 10作業系統,並提供64位元的Windows版軟體,因此在Windows平臺上,終於能充分發揮64位元硬體的性能。在目前的辦公室套裝軟體中,具有原生64位元Windows版程式的辦公室軟體,幾乎就只有微軟Office,以及LibreOffice 5了。

2016年2月11日 星期四

__attribute__ 機制


__attribute__ 機制

GNU C 的一大特色就是__attribute__ 機制。 __attribute__ 可以設置函數屬性(Function Attribute)、變數屬性(Variable Attribute)和類型屬性(Type Attribute)


__attribute__ 書寫特徵:__attribute__ 前後都有兩個底線,後面會緊跟一對原括弧,括弧裡面是相應的__attribute__ 參數。


__attribute__ 語法格式為:__attribute__ ((attribute-list))
其位置約束為:放於宣告尾部的分號“ ;” 之前。

關鍵字__attribute__ 也可以對結構體(struct )或共用體(union )進行屬性設置。大致有六個參數值可以被設定,即:

aligned, 
packed, 
transparent_union, 
unused, 
deprecated 和 
may_alias 。

在使用__attribute__ 參數時,你也可以在參數的前後都加上“__” (兩個底線),例如,使用__aligned__而不是aligned ,這樣,你就可以在相應的標頭檔裡使用它而不用關心標頭檔裡是否有重名的巨集定義。
 


aligned (alignment)
該屬性設定一個指定大小的對齊格式(以位元組 為單位),例如:
struct S {
short b[3];
} __attribute__ ((aligned (8)));
typedef int int32_t __attribute__ ((aligned (8)));
 

該聲明將強制編譯器確保(盡它所能)變數類 型為struct S 或者int32_t 的變數在分配空間時採用8 位元組對齊方式。
如上所述,你可以手動指定對齊的格式,同 樣,你也可以使用預設的對齊方式。如果aligned 後面不緊跟一個指定的數字值,那麼編譯器將依據你的目的機器情況使用最大最有益的對齊方式。例如:
struct S {
short b[3];
} __attribute__ ((aligned));
 

這裡,如果sizeof (short )的大小為2 (byte ),那麼,S 的大小就為6 。取一個2 的次方值,使得該值大於等於6 ,則該值為8 ,所以編譯器將設置S 類型的對齊方式為8 位元組。aligned 屬性使被設置的物件佔用更多的空間,相反的,使用packed 可以減小物件佔用的空間。需要注意的是,attribute 屬性的效力與你的連接器也有關,如果你的連接器最大只支援16 位元組對齊,那麼你此時定義32 位元組對齊也是無濟於事的。
 


packed
使用該屬性對struct 或者union 類型進行定義,設定其類型的每一個變數的記憶體約束。當用在enum 類型 定義時,暗示了應該使用最小完整的類型(it indicates that the smallest integral type should be used)。
  

下面的例子中,packed_struct 類型的變數陣列中的值將會緊緊的靠在一起,但內部的成員變數s 不會被“pack” ,如果希望內部的成員變數也被packed 的話,unpacked-struct 也需要使用packed 進行相應的約束。
struct unpacked_struct
{
      char c;
      int i;
};
       
struct packed_struct
{
     char c;
     int  i;
     struct unpacked_struct s;
}__attribute__ ((__packed__));