Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如何在visualstudioc++; 需要帮助。当在Windows Visual Studio上运行C++代码时,我遇到了一个问题。p>_Visual Studio_Memory Management - Fatal编程技术网

Visual studio 如何在visualstudioc++; 需要帮助。当在Windows Visual Studio上运行C++代码时,我遇到了一个问题。p>

Visual studio 如何在visualstudioc++; 需要帮助。当在Windows Visual Studio上运行C++代码时,我遇到了一个问题。p>,visual-studio,memory-management,Visual Studio,Memory Management,当我在Linux环境中运行该代码时,我能够动态分配的内存没有限制(直到RAM中的可用大小) 但在VS编译器上,它不允许我创建超出有限大小的数组。 我尝试了/F选项和20-25个谷歌链接来增加内存大小,但它们似乎没有多大帮助 我目前只能分配3gb可用容量中的大约100mb 如果在Windows中有解决方案,而不是在Visual Studio的编译器中,我会很高兴听到这个消息,因为我有一个CUDA TeslaC2070卡,它在Windows上被证明是非常无用的,因为我想在Windows环境下运行我的

当我在Linux环境中运行该代码时,我能够动态分配的内存没有限制(直到RAM中的可用大小)

但在VS编译器上,它不允许我创建超出有限大小的数组。 我尝试了/F选项和20-25个谷歌链接来增加内存大小,但它们似乎没有多大帮助

我目前只能分配3gb可用容量中的大约100mb

如果在Windows中有解决方案,而不是在Visual Studio的编译器中,我会很高兴听到这个消息,因为我有一个CUDA TeslaC2070卡,它在Windows上被证明是非常无用的,因为我想在Windows环境下运行我的CUDA/C++代码

这是我的密码。当长度>128时,它会失败(没有640x480png的图像。每个图像小于0.5mb。我还通过计算OpenCV和我使用的数据结构和类型计算了它所需的大致内存大小,但仍然非常小于2gb)。堆栈溢出异常。动态分配也是如此。我已经最大化了堆和堆栈的大小

#include "stdafx.h"

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

#include <cuda.h>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#define LENGTH 100
#define SIZE1 640   
#define SIZE2 480
#include <iostream>
using namespace std;


__global__ void square_array(double *img1_d, long N)
{

int idx = blockIdx.x * blockDim.x + threadIdx.x;

img1_d[idx]= 255.0-img1_d[idx];

}


int _tmain(int argc, _TCHAR* argv[])
{   
        IplImage *img1[LENGTH];
        // Open the file.
        for(int i=0;i<LENGTH;i++)
        {   img1[i] = cvLoadImage("abstract3.jpg");}




    CvMat *mat1[LENGTH];
    for(int i=0;i<LENGTH;i++)
    {
        mat1[i] = cvCreateMat(img1[i]->height,img1[i]->width,CV_32FC3 );
        cvConvert( img1[i], mat1[i] );
    }


    double a[LENGTH][2*SIZE1][SIZE2][3];

    for(int m=0;m<LENGTH;m++)
    {
    for(int i=0;i<SIZE1;i++)
    {
         for(int j=0;j<SIZE2;j++)
         {
               CvScalar scal = cvGet2D( mat1[m],j,i);
               a[m][i][j][0] = scal.val[0];
               a[m][i][j][1] = scal.val[1];
               a[m][i][j][2] = scal.val[2];

               a[m][i+SIZE1][j][0] = scal.val[0];
               a[m][i+SIZE1][j][1] = scal.val[1];
               a[m][i+SIZE1][j][2] = scal.val[2];

            }

    }   }

//cuda
double *a_d;
int N=LENGTH*2*SIZE1*SIZE2*3;

cudaMalloc((void **) &a_d, N*sizeof(double));
cudaMemcpy(a_d, a, N*sizeof(double), cudaMemcpyHostToDevice);
int block_size = 370;
int n_blocks = N/block_size + (N%block_size == 0 ? 0:1);
cout<<n_blocks<<block_size;
square_array <<< n_blocks, block_size >>> (a_d, N);
cudaMemcpy(a, a_d, N*sizeof(double), cudaMemcpyDeviceToHost);

//cuda end



char name[]= "Image: 00000";
name[12]='\0';
int x=0,y=0;
for(int m=0;m<LENGTH;m++)
{
for (int i = 0; i < img1[m]->width*img1[m]->height*3; i+=3) 
{ 
 img1[m]->imageData[i]= a[m][x][y][0];
 img1[m]->imageData[i+1]= a[m][x][y][1];
 img1[m]->imageData[i+2]= a[m][x][y][2];

  if(x==SIZE1)
  {
  x=0;
  y++;
  }
x++;
}

    switch(name[11])
    {
        case '9': switch(name[10])
        {
            case '9': 
            switch(name[9])
            {
                case '9': name[11]='0';name[10]='0';name[9]='0';name[8]++;
                break;
                default : name[11]='0';
                name[10]='0';
                name[9]++;
            }break;

            default : name[11]='0'; name[10]++;break;
            }

            break;
        default : name[11]++;break;
    }
        // Display the image.
        cvNamedWindow(name, CV_WINDOW_AUTOSIZE);
        cvShowImage(name,img1);
    //cvSaveImage(name ,img1);
}
        // Wait for the user to press a key in the GUI window.
        cvWaitKey(0);

        // Free the resources.
        //cvDestroyWindow(x);
        //cvReleaseImage(&img1);
    //cvDestroyWindow("Image:");
        //cvReleaseImage(&img2);

        return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括“cuda_runtime.h”
#包括“设备启动参数.h”
#定义长度100
#定义尺寸1640
#定义大小2480
#包括
使用名称空间std;
__全局无效方形阵列(双*img1\u d,长N)
{
int idx=blockIdx.x*blockDim.x+threadIdx.x;
img1_d[idx]=255.0-img1_d[idx];
}
int _tmain(int argc,_TCHAR*argv[]
{   
IplImage*img1[长度];
//打开文件。
对于(int i=0;iwidth,CV_32FC3);
cvConvert(img1[i],mat1[i]);
}
双a[长度][2*SIZE1][SIZE2][3];

对于(int m=0;m而言,问题在于您在主函数的堆栈上分配了一个巨大的多维数组(双a[…][…][…])。不要在堆栈上分配这么多内存。请使用malloc/new在堆上分配。

请给出一个代码示例。您甚至没有告诉我们限制是什么。您是否尝试过在项目属性->链接器->系统下设置堆和堆栈保留大小?是的,我已将它们设置为可能的最大值。另外,它还说使用/F命令In编译选项。我也尝试过。我在特斯拉有大约6gb的内存可供计算。我只需要一种方法在windows中达到该内存。@johnsaunds我已经上传了代码。你能帮我解决这个问题吗。我真的需要解决这个问题,因为我在过去6个月里一直在处理它。代码在Lin上运行2-3天都很好如果你需要的话,我也可以上传VS设置截图。谢谢你的帮助。我的C++太生疏了。很多问题都发生了。OpenCV有自己的栈实现,我没有任何控制。请帮助。完全理解你的意思,但我不可能在这里发布所有代码,因为我不完全确定这个网站是如何工作的。我在过去的6个月里一直在解决这个问题,并尝试了一个非常简单的opencv代码,在其中我输入了300张图片并将其保存回来。而该代码也不起作用。我同意在这段代码中有双重作用堆栈中的角色,但也是来自opencv。将数组移动到堆将修复第一个错误。如果您有进一步的问题,请提供详细信息。如果您有另一个失败的示例,您也应该发布该示例。