回答
這應該適用於大多數(所有?)體系結構,並且不需要特定於編譯器的技術,但我承認不確定此聲明的本意與全局/文件範圍有什麼關係。
void f1(void)
{
union
{
uint32_t align;
uint8_t arr[4*32];
} slope;
/* can now be access via slope.arr[] */
}
This doe實際上並不能保證32位對齊。它保證了'uint32_t'和'uint8_t'類型在C實現中所需的對齊,不一定是32位。 (這可能足以滿足OP的需要,但這不是他們要求的。) –
我也應該提到我的答案需要符合C99的編譯器。我認爲uint32_t必須是標準寬度的32位。它是否仍然可以在16位邊界上分配? – Ryan
該標準確實指定'uint32_t'必須完全是32位,但它沒有爲它指定任何對齊要求。 –
- 1. 字符堆棧,字符串堆棧,整數堆棧,整數數組堆棧等
- 2. 堆棧分配,填充和對齊
- 3. 對齊或不對齊堆棧上的char數組?
- 4. 如何64位整數分成兩個32位的整數
- 5. 如何在GCC的32字節邊界對齊堆棧?
- 6. Linux 32位機器上程序的堆棧分配限制
- 7. 對齊堆棧上的數據(C++)
- 8. 如何設置_id爲32位整數?
- 9. 如何將字符串轉換爲32位整數數組?
- 10. 堆VS數據段VS堆棧分配
- 11. 在堆上分配vs在遞歸函數中分配堆棧
- 12. 堆棧或堆上的對象分配
- 13. 定時數組靜態數組分配vs堆棧中的數組C
- 14. Python中,如何將32位整數放入字節數組中
- 15. 如何從堆中爲InterlockedIncrement函數分配正確的內存對齊方式?
- 16. 受保護的堆對象堆棧vs堆棧分配
- 17. C++堆分配默認32字節對齊?
- 18. 創建OBJECT數組時,分配的內存(堆棧和堆引用)如何?
- 19. 爲相對位置/堆棧
- 20. 對象分配在堆棧或堆C++
- 21. C數組實例化 - 堆棧還是堆分配?
- 22. 訂單破壞堆棧/堆分配數組
- 23. 何時在堆棧上分配固定大小的數組?
- 24. 32位和64位處理器的堆棧如何不同
- 25. 對32位整數進行位處理
- 26. 明確堆棧分配的數據
- 27. C中的堆棧分配
- 28. 將8位整數數組移動到32位數組程序
- 29. 是在java中堆棧或堆中分配的數組的內存?
- 30. 在32位整數
相關:。?[GCC __attribute __((對準(X))的解釋](http://stackoverflow.com/q/841433/464709) –
什麼架構x86_64的已堆疊在16字節邊界對齊, – 2014-02-13 19:31:04
如果在你使用的類型中定義數組,它將按照C實現中的要求進行對齊,例如,如果將數組定義爲'uint32_t slope [32 ];',它會根據需要進行對齊。嘗試對齊數組比C實現通常需要的更多,只能在特殊情況下完成。具體來說,您試圖解決的更大問題是什麼? –