1. 程式人生 > >C/C++獲得對齊的記憶體的跨平臺解決方案

C/C++獲得對齊的記憶體的跨平臺解決方案

       在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
}

當然,你也可以自己去實現這兩個函式,當然能呼叫平臺相關的函式也是一個解決方案。