关于long long int的问题

hbb21st 2011-06-28 08:07:30
问题是这样的,
long long int k = 1024*1024*1024*36;
int *array = new int[k]; //这句该怎么写?
GCC 编译时通过的,但是运行时而报错时而通过,请问该如何为array分配内存?
...全文
185 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
RLib 2011-06-28
  • 打赏
  • 举报
回复
用NtAllocateVirtualMemory试试
luciferisnotsatan 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 rrrfff 的回复:]

引用 3 楼 zjs100901 的回复:
144G的内存啊,整台电脑要上万元吗?


有虚拟内存啊
[/Quote]
你的是64为系统么?即使是64位,还是怀疑系统在物理内存里找不到一块那么大的空间,直接报失败了。还到不了虚拟内存那块。
你可以试试内存文件映射。

而且,long long int k = 1024*1024*1024*36;后面的计算好象就是32位计算,会溢出
long long int k = 1024*1024*1024*36ll; ll说明36是long long的,之后的计算会是64位的
qq120848369 2011-06-28
  • 打赏
  • 举报
回复
要会变通,行不通你还要硬撞,这是什么态度.
hbb21st 2011-06-28
  • 打赏
  • 举报
回复
问题就在我们的iwork分配上,LW的值相当的大(分子规模少说数百万),怎么记录这么大的int data呢
void BEMPB::val_gndgnlap(int nsou, double (*zsou)[3], double *charg, int ntar, double (*ztar)[3], double (*ztarnd)[3], double *gn, double *dgn, MolecularBean &mb){
clock_t start, finish;
// cout<<this->totmem<<endl;
start = clock();
int atomNum = mb.pqb.getAtomVec().size();
PQRBean &pqrB = mb.pqb;

long long int lw = mb.nodeV.size()*600 + atomNum*100; //就这句的问题
int *iwork = new int[lw];

int nboxes = NBOXES;
long long int lws = lw-nsou-ntar-10;
double epsclose = EPSCLOSE;
int ninire = NINIRE;
int nbox = NBOX;

String s = "tree memory allocated (mb): ";
double rmem = (double) (lw*sizeof(int))/1024/1024;
s = s + rmem;
addString(s);

this->meminc(rmem);

//generate adaptive tree structure.
int ier = 0;
double center[3]; // size = 0,
int lused = LUSED;
int laddr[200][2];
int nlev;

d3mstrst_(&ier, zsou, &nsou, ztar, &ntar, &nbox, &nboxes, iwork, iwork+nsou+4,
laddr, &nlev, center, &size, iwork+nsou+ntar+9, &lws, &lused, &epsclose, &ninire );
......
hbb21st 2011-06-28
  • 打赏
  • 举报
回复
快来人给我我要的答案啊!我等着着急呐
Defonds 2011-06-28
  • 打赏
  • 举报
回复
new(牛) man 的?
hbb21st 2011-06-28
  • 打赏
  • 举报
回复
我的问题就是要这么大的,我们的Workstation内存150G
long long int j = 1024*1024*1024;
int *array = new int[j]; //这句有问题么?
for(long long i=0; i<j; i++){
*(array+i) = 99999;
}
结果并没有为所有的array元素赋值。把j减小为1024*1024才行,请问我就要这么大的规模怎么办?是第二句的问题么?
hzy694358 2011-06-28
  • 打赏
  • 举报
回复
我觉得申请这么大的内存真的没多大必要
因为很容易就申请失败了,

yfk 2011-06-28
  • 打赏
  • 举报
回复
之前做过实验,在16G的机器上,申请300G的内存,结果系统显示虚存占用300G,后续内存申请全部显示不足。

这种情况需要进行异常处理,like:

try
{
int* a = new int[8000000000];
cout << "get memory" << endl;
}
catch(bad_alloc& ba)
{
cout << "catch the exception" << endl;
}


http://blog.csdn.net/yfkiss/archive/2011/04/14/6323258.aspx
zjs100901 2011-06-28
  • 打赏
  • 举报
回复
编译时通过不一定链接通过,链接通过不一定能运行,能运行不一定运行正确。
RLib 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zjs100901 的回复:]
144G的内存啊,整台电脑要上万元吗?
[/Quote]

有虚拟内存啊
RLib 2011-06-28
  • 打赏
  • 举报
回复

long long int k = 1024*1024*1024*36;
int *array = new int[k];//这里有1024*1024*1024*36个int,占用了1024*1024*1024*36*4=154618822656个字节
zjs100901 2011-06-28
  • 打赏
  • 举报
回复
144G的内存啊,整台电脑要上万元吗?
RLib 2011-06-28
  • 打赏
  • 举报
回复
1024*1024*1024*36内存太大了
zjs100901 2011-06-28
  • 打赏
  • 举报
回复
你的电脑好强大。

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧