c/c++语言开发共享如何动态分配16B对齐的2d数组

我想使用memalign和16B分配2D数组(方阵),而不是仅使用malloc

我有

 A =(float **) malloc( (*dim) * sizeof(float*)); for ( i = 0 ; i < (*dim) ; i++) { A[i] = (float*) malloc(sizeof(float)*(*dim)); } 

如何用memalign更改上面的代码。

    使用malloc()您需要请求15个额外字节,然后将返回的指针向上舍入到最接近的16的倍数,例如:

     void* p = malloc(size + 15); void* paligned; if (!p) { /* handle errors */ } paligned = (void*)(((size_t)p + 15) / 16 * 16); /* use paligned */ free(p); 

    你在这里所拥有的并不是一个2D矩阵,只是一个指向更多1Darrays的1Darrays。

    你想要这样的东西吗?

     A = (float*) memalign(16, (*dim) * (*dim) * sizeof(float)); 

    这将生成一个1D数组,其长度为dim ^ 2个元素。 这就是2D数组通常在C / C ++中使用的方式(除非您有特定的理由使用指向其他数组的指针数组)。

    我假设您希望将此数组提供给某些DSP函数 – 如果不知道您尝试使用的函数,很难知道更多。

    如果您必须以A [x] [y]访问数组,则可以执行以下操作:

     float *aMemory = (float*) memalign(16, (*dim) * (*dim)); float **A = (float**) malloc(*dim * sizeof(float)); for (i = 0; i < *dim; i++) { A[i] = &aMemory[*dim * i]; } 

    现在,您可以通过指针数组A访问数组aMemory

     // A[row][column] A[0][0] = 0.0f; A[1][1] = 1.0f; 

    等等

      以上就是c/c++开发分享如何动态分配16B对齐的2d数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549657.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐