hur.cn - 华软网

 热门搜索

问个关于64位系统的问题?

  作者:未知    来源:网络    更新时间:2011/8/27
32位系统的一个进程最大虚拟空间是2GB,而64有16 GB.
如果5GB文件要读到内存,在64位的系统是不会崩溃的?
---华软 网友回答---
用内存映射文件。
---华软网友回复---
因为要在内存中查询数据,超大内存映射文件查询太慢用不了。
现在情况是必须要把文件解析到快速查询数据结构中。但读到内存后,超过最大虚拟空间2GB(其实不到点),程序直接就挂掉了。咋整?所以问是不是要弄到64位系统里面?
---华软网友回复---
经过测试,64系统里面分配3G内存程序崩溃。
代码如下:
char* p = new char[1024*1024*1024*3]; //执行这句后就崩溃掉了。
delete []p;
---华软网友回复---
引用 3 楼 nola 的回复:
经过测试,64系统里面分配3G内存程序崩溃。
代码如下:
char* p = new char[1024*1024*1024*3]; //执行这句后就崩溃掉了。
delete []p;

你的处理很奇特,为啥要把文件全部读到内存呢?一部分一部分读不行么?还是在测试内存分配??
---华软网友回复---
你是编译的64位程序吗?
---华软网友回复---
我编译时候出错:error C2148: 数组的总大小不得超过 0x7fffffff 字节
C++">#include "stdafx.h"
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
char* p = new char[1024*1024*1024*3];
printf("p=%x\n", p);
delete []p;
return 0;
}


---华软网友回复---
“据说64位机子最大可以分配16G内存”我就是试试这个,没想到我只分配了3G程序就崩溃了。
---华软网友回复---
引用 6 楼 cczlp 的回复:
我编译时候出错:error C2148: 数组的总大小不得超过 0x7fffffff 字节

C/C++ code
#include "stdafx.h"
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
    char* p = new char[1024*1024*1024*3];
    printf("……



你是.c文件吧!cpp编译应该没问题。
---华软网友回复---
要看系统和硬件了,就像32位系统你也可能分配不到1G的空间啊
---华软网友回复---
引用 2 楼 nola 的回复:
因为要在内存中查询数据,超大内存映射文件查询太慢用不了。
现在情况是必须要把文件解析到快速查询数据结构中。但读到内存后,超过最大虚拟空间2GB(其实不到点),程序直接就挂掉了。咋整?所以问是不是要弄到64位系统里面?

查询太慢与内存映射无关,内存映射只是读写方式。
无疑你应该用64位系统。
你的实际内存也必须足够大,比如6G,否则你不能一次读很多数据到内存。
我用window sever 2003 64bit一次分配2G以上内存是没问题的。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。