C/C++獲得對齊的記憶體的跨平臺解決方案
阿新 • • 發佈:2019-02-10
在C/C++開發的時候,有時候需要獲得記憶體對齊的記憶體塊,這一需求主要源於多媒體指令集需要記憶體對齊的記憶體塊,這樣處理速度會快一點。例如SSE/SSE2/MMX/AVX等指令集都需要對齊的記憶體。這些多媒體指令集常用於語音合成、影象處理、3D圖形學等領域。
下面是封裝的記憶體對齊的記憶體分配函式。
void* aligned_malloc(size_t size, size_t align) { void *result = NULL; #ifdef _MSC_VER result = _aligned_malloc(size, align); #elif __APPLE__ if(posix_memalign(&result, align, size)) result = NULL; #elif __linux__ result = memalign(align,size); #endif return result; }
有了記憶體分配的函式,當然也要有記憶體釋放的函式。
void aligned_free(void *ptr)
{
#ifdef _MSC_VER
_aligned_free(ptr);
#else
free(ptr);
#endif
}
當然,你也可以自己去實現這兩個函式,當然能呼叫平臺相關的函式也是一個解決方案。