GCC或glibc中是否有任何標準化函數在對齊的指針處分配內存塊? 像_align_malloc()在MSVC?在GCC中對齊malloc()?
回答
請參閱memalign系列功能。
這取決於您期望的對齊方式。你想要一個更嚴格的路線,還是更放鬆的路線?
malloc
根據定義,保證返回一個正確對齊的指針,用於存儲C程序中的任何標準類型(以及因此,從標準類型構建的任何類型)。這是你在找什麼?或者你需要不同的東西?
一個普通的p因爲SIMD類型(比如SSE向量)不被認爲是「標準類型」,因此它們比malloc提供的更嚴格的對齊要求。 – jalf 2011-07-09 11:01:58
想要做到這一點的另一個原因是性能。通過對齊數據結構,使其跨越'n'而不是'n + 1' L1高速緩存行,其大小通常爲4096個字節左右,所以您平均可以獲得更快的內存訪問。對於某些應用程序,比如說音頻處理,其中緩衝區是L1緩存線的大小,或者是該大小的小數倍,這可能會產生很大的差異。 – nitro2k01 2014-04-14 22:08:11
@ nitro2k01:高速緩存行比較小,例如在x86上32,在amd64上64。 OTOH頁面是4k。 – diapir 2014-07-05 01:09:16
的〔
posix_memalign()
] [1]函數提供對準的存儲器分配和由於glibc的2.1.91 已面世。
但不一定與其他編譯器:引用標準 「的posix_memalign()函數是諮詢信息選項的一部分,不需要設置在所有的實現」
既然有人問,一個新的功能進行了標準化的C11:
void *aligned_alloc(size_t alignment, size_t size);
,它是在glibc的可用(未在Windows,據我所知)。它的參數採用與memalign
相同的順序,與微軟的_aligned_malloc
相反,並且像往常一樣使用free
函數進行重新分配。
有_mm_malloc
和其通過在x86/x64世界大部分編譯器支持_mm_free
,與至少:
- GCC
- MinGW的(GCC的Win32/Win64的)
- MSVC
- 鐺
- ICC
A FAIK,這些功能根本不是標準。但據我所知,這是最受支持的。其他的功能也越來越編譯具體:
- _aligned_malloc是MSVC和MinGW只
- POSIX包括memalign功能不被至少MSVC
還有C11標準功能的支持,但遺憾的是他們都沒有C++ 11,幷包括他們在C++中需要非標準的預處理器定義...
- 1. C++中對齊的malloc
- 2. 對齊malloc和標準malloc不同嗎?
- 3. C在GCC中的函數對齊
- 4. malloc與newLib中對齊的內存
- 5. 的malloc - C程序 - 在GCC
- 6. GCC PPC64對齊功能
- 7. 在arm7中使用gcc實現malloc問題:malloc返回NULL
- 8. 內存對齊高於最大對齊比較alignas malloc
- 9. GCC中的結構對齊(應該在typedef中指定對齊方式嗎?)
- 10. malloc會保證內存對齊嗎?
- 11. Malloc和未對齊的內存
- 12. 如何用malloc()完成字節對齊?
- 13. malloc和gcc優化2
- 14. GCC產生的未對齊 「LDRD」 指令
- 15. gcc內存對齊編譯指示
- 16. Qt,GCC,SSE和堆棧對齊
- 17. GCC VS MSVC類打包和對齊
- 18. 在GCC中與NEON內部函數對齊的加載/存儲
- 19. 如何在GCC C中獲得對齊的數組結構?
- 20. TI LM4F120,GNU ARM GCC eabi和malloc:調用malloc時崩潰
- 21. 爲什麼malloc在gcc中將值初始化爲0?
- 22. GCC/Clang中用於存儲器對齊的通用屬性
- 23. 如何在GCC的32字節邊界對齊堆棧?
- 24. 對齊指針在GCC整數英特爾的x64
- 25. c&gcc:堆棧增長和對齊 - 對於64位機器
- 26. 當malloc返回時,8字節對齊意味着什麼?
- 27. 在VLD1中對齊
- 28. 在Android中對齊
- 29. 對齊在PowerShell中
- 30. 在Android中對齊
stdlib唯一版本http://stackoverflow.com/questions/227897/how-to-allocate-aligned-memory-only-using-標準庫 – 2017-03-16 07:22:30