malloc的大小有限制吗?
Is there a limit size of malloc?
我有一个问题,当我试图运行我的cuda程序在TITAN BLACK,这是这样的东西(我简化了它,所以它看起来不复杂)
int DIMX, DIMZ,DIMXM, DIMZM;
DIMXM=5700;
DIMZM=5700;
DIMX=DIMXM+20;
DIMZ=DIMZM+10;
float *temptxz = (float*)malloc( sizeof(float)*(DIMX*DIMZ));
float *temptxx = (float*)malloc( sizeof(float)*(DIMX*DIMZ));
float *temptzz = (float*)malloc( sizeof(float)*(DIMX*DIMZ));
float *tempvz = (float*)malloc( sizeof(float)*(DIMX*DIMZ));
float *tempvx = (float*)malloc( sizeof(float)*(DIMX*DIMZ));
for (int ij=0; ij<DIMX*DIMZ; ij++)
{
temptxz[ij]=0.0;
temptxx[ij]=0.0;
temptzz[ij]=0.0;
tempvx[ij]=0.0;
tempvz[ij]=0.0;
}
对于NX=4700是可以的;新西兰= 4700;但是如果我再增加一点(使内存大小超过2 gb),编译正常,但是当我运行程序时,它崩溃了,警告是"0xC0000005:访问违规写入位置0x00000000。"
是因为在malloc中有某种大小限制吗?还是说TITAN黑色的pitch memory只有2gb ?
对不起,我的英语很糟糕。由于在windows上,32位进程默认有2GB的用户VA空间限制。请参阅此MSDN页面了解不同windows操作系统版本的限制以及可能增加限制的选项。最好的解决方案是将应用程序编译为64位应用程序,该应用程序具有8TB的用户空间VA限制。
一旦发生错置,请检查指针。Malloc试图在堆上为变量腾出空间,但它不能保证该变量被占用。这通常是由于您的环境所施加的内存限制。你总是可以通过在malloc之后检查指针的值来检查指针是否被正确创建。
x = malloc(SIZE);
if(x == NULL) //error
这个验证总是很重要的,因为否则你将试图写一个不存在的内存地址(0x0)
对于CUDA,您可以使用
显式设置堆大小。cudaDeviceSetLimit()
在文档中
相关文章:
- 在程序变得低效之前,允许多少新的[]和删除[]分配是否有限制?
- 对同一文件使用 .read 的次数是否有限制?
- 有条件的打印和计数在 std::map 上有限制
- arduino count++ 是否有限制以及如何修复它?
- 创建的事件数量是否有限制?
- 在SFML中,时钟有限制吗?
- 在mbed中打开的wav文件数量是否有限制
- C++中无序集的大小是否有限制
- 是否对在另一个Linux发行版中使用G 编译的可执行文件有限制
- 这个程序有限制吗?
- std::set::迭代器的大小有限制吗
- 递归是否有限制
- 可以在 CUDA 中使用的数组大小是否有限制
- 使用 SB_SETTEXT 的状态栏中显示的字符数是否有限制
- 在matlab上生成有限制的随机向量时出现问题
- Q设置:.ini文件的行长度有限制吗
- 在Main.cpp中包含头文件有限制吗?
- 访问者模式与对输入类型有限制的向下转换
- cin.有限制地忽略,继续丢弃新的输入
- malloc的大小有限制吗?