C++ : Variable Length Array [duplicate]

有些话、适合烂在心里 提交于 2019-11-27 08:46:56

问题


How does Variable Length arrays (VLA) take space in memory?

I have observed that VLAs do not take continuous memory space, can anyone please confirm the same??

void func(const IplImage *imgSrc, IplImage *imgDest)
{
  uchar *data = (uchar *)imgSrc->imageData;      

  // get the image data
  int height    = imgSrc->height;
  int width     = imgSrc->width;
  int step      = imgSrc->widthStep;
  int stepSobel = imgDest->widthStep;

  //Calculate Sobel of Image  
  uchar *dataSobel = (sobelStart + stepSobel);  

  //**Declaration of VLAs**
  int prevRowBuf[width],curRowBuf[width],nextRowBuf[width];

  for(int j=1;j<(width-1);j++)
  {    
    prevRowBuf[j] = data[j+1]-data[j-1];
    curRowBuf[j]  = data[step+j+1]-data[step+j-1];
  }

  // Some opencv processing
    for() // Some Conditions
    {

        //memcpy(prevRowBuf,curRowBuf,width);
        //memcpy(curRowBuf,nextRowBuf,width);

        //Replaced with
        for(int i=0 ; i< width; i++)
        {
          prevRowBuf[i]=curRowBuf[i];
          curRowBuf[i]=nextRowBuf[i];
        }
    } 
 }

With the two memcpy operations, my program was working only for few starting indexes of VLAs. But after replacing the memcpy with for Loop my program is working fine for all the indexes of VLAs.


回答1:


First off, C++ has no VLAs. GCC implements them as a nonstandard extension.

Now, to answer your question in the context of said GCC extension:

I have observed that VLAs do not take continuous memory space, can anyone please confirm the same?

No, that is wrong. VLAs will take up continuous space. That space usually (always?) comes from the stack rather than the heap memory, just like statically sized C arrays.



来源:https://stackoverflow.com/questions/17318007/c-variable-length-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!