2014-02-13 49 views
0

我需要在我的函數堆棧中分配一個整數數組,我怎樣才能使它32位對齊?如何分配堆棧中的整數數組爲32位對齊

void f1() { 
    uint8_t slope[4*32]; 
} 

我在linux上運行。

+0

相關:。?[GCC __attribute __((對準(X))的解釋](http://stackoverflow.com/q/841433/464709) –

+0

什麼架構x86_64的已堆疊在16字節邊界對齊, – 2014-02-13 19:31:04

+2

如果在你使用的類型中定義數組,它將按照C實現中的要求進行對齊,例如,如果將數組定義爲'uint32_t slope [32 ];',它會根據需要進行對齊。嘗試對齊數組比C實現通常需要的更多,只能在特殊情況下完成。具體來說,您試圖解決的更大問題是什麼? –

回答

0

這應該適用於大多數(所有?)體系結構,並且不需要特定於編譯器的技術,但我承認不確定此聲明的本意與全局/文件範圍有什麼關係。

void f1(void) 
{ 
    union 
    { 
     uint32_t align; 
     uint8_t arr[4*32]; 
    } slope; 

    /* can now be access via slope.arr[] */ 
} 
+3

This doe實際上並不能保證32位對齊。它保證了'uint32_t'和'uint8_t'類型在C實現中所需的對齊,不一定是32位。 (這可能足以滿足OP的需要,但這不是他們要求的。) –

+0

我也應該提到我的答案需要符合C99的編譯器。我認爲uint32_t必須是標準寬度的32位。它是否仍然可以在16位邊界上分配? – Ryan

+1

該標準確實指定'uint32_t'必須完全是32位,但它沒有爲它指定任何對齊要求。 –