2016-12-05 39 views
0

考慮下面的C代碼更大:對準 - 數組元素的對齊比元件尺寸

typedef __attribute__((aligned(16))) signed int INT32; 

int main(int argc, char* argv[], char* envp[]) 
{ 
    INT32     my_array[255]; 
    return 0; 
} 

編譯它返回錯誤:

alignment_problem.c: In function ‘main’: 
alignment_problem.c:7:2:error: alignment of array elements is greater than element size 
INT32     my_array[255]; 

我有不是編譯程序由於這個錯誤。

有沒有一種方法來定義INT32的對齊方式將工作?

我知道clang編譯這段代碼時沒有錯誤,但我想知道是否有辦法用gcc編譯代碼。

編輯:問題是,typedef INT32是一個大的程序之一。所以我正在尋找的解決方案是改變INT32的定義,以便程序能夠編譯和運行。

+0

您打算讓陣列的每個元素都在16字節邊界上對齊嗎? –

+0

這是一個關於gcc的問題。標記爲gcc。 – alinsoar

回答

0

錯誤是因爲你試圖對齊int而不是數組。您擁有的選項是,您可以在數組中使用已知數量的元素進行typedef,並相應地對齊它。

typedef signed int INT32[255] __attribute__((aligned(16))); 

int main(int argc, char* argv[], char* envp[]) 
{ 
    INT32     my_array; 
    return 0; 
} 

或者您可以在每次使用需要對齊的數組時對齊它。

int main(int argc, char* argv[], char* envp[]) 
{ 
    signed int my_array[255] __attribute__((aligned(16))); 
    return 0; 
} 
+0

謝謝你的回答,但是我需要一個不需要修改程序代碼的'INT32'的typedef。那可能嗎? –

+0

不幸的是,你不能,因爲INT32不是16字節長,所以邏輯上沒有辦法調整它。 – koper89