map大小有限制?高手:帮忙测试一个程序

topgun 2004-08-18 10:27:48
我用STL库中的map容器,遇到以下问题:我想把200,0000条
记录放到map内存中处理,但是每次总是加载到中途(不到100万)
就报内存出错,我的运行环境是8G内存的AIX上,谢谢!

shell>xlC -q64 -g stltest.cc -o ./stltest
shell>./stltest


//================stltest.cc=================================================//
#pragma warning(disable:4786)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <map>
#include <algorithm>
using namespace std ;

int main(int argc,char *argv[])
{
typedef map<string,int> MHistItem ;
MHistItem map_all_pass ;

char key[20]="\0" ;
for(int i=0; i< 2000000 ; i ++ )
{
sprintf(key,"%d\0",i) ;
map_all_pass.insert( MHistItem::value_type( string(key), 1)) ;

if( i%10000==0 )
printf("load:%d\n" , i/10000*10000) ;
}
map_all_pass.clear() ;
printf("======hello world=======\n");
}
//====================================================================//
...全文
863 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
topgun 2004-08-19
  • 打赏
  • 举报
回复

出错信息是:IOT/Abort trap(coredump)

我用大虾的方法把最大值取出来时:map_all_pass.max_size()=1717986918


但是加载出错?应该修改什么配置文件?
topgun 2004-08-19
  • 打赏
  • 举报
回复
IOT/Abort trap(coredump)
map_all_pass.max_size()=1717986918
topgun 2004-08-19
  • 打赏
  • 举报
回复
unix在/etc下是修改什么文件?
CNXQS 2004-08-19
  • 打赏
  • 举报
回复
我在Dev-C++ 4.9 上面帮你测了一下你的程序,通得过的锣。
chesoye 2004-08-19
  • 打赏
  • 举报
回复
windows2000 vc++6.0 内存256M
map max_size():1073741823
测试通过
柯本 2004-08-19
  • 打赏
  • 举报
回复
我在win2k下用gcc也没问题,unix 系统对用户内存会有限止,可能是这个问题
一般unix在/etc下有一个关于系统设置的system文件(aix我不熟)
rtdb 2004-08-19
  • 打赏
  • 举报
回复
多说一句,若是可以的话,应用int当key, 内存能少用很多,效率也要好。
demo001 2004-08-19
  • 打赏
  • 举报
回复
你看看etc下面有没有barshrc文件?
demo001 2004-08-19
  • 打赏
  • 举报
回复
哦,错了

晕了

不是这篇帖子
demo001 2004-08-19
  • 打赏
  • 举报
回复
对了

楼主的程序能够编译通过?

我怎么觉得少个<iterator>啊
shornmao 2004-08-18
  • 打赏
  • 举报
回复
请把报的内存出错信息贴出来,是core dump吗?那应该和内存限制无关,而是有BUG了。
fangrk 2004-08-18
  • 打赏
  • 举报
回复
我在windows2000 pro下面用.net 2003试过了,可以运行。
Andy84920 2004-08-18
  • 打赏
  • 举报
回复
size_type max_size() const { return _M_t.max_size(); }
我的测试程序如下:
#include <iostream>
using namespace std;

#include <map>

int main()
{
map<int,char *>a;
cout << a.max_size() << endl;
}
结果是:
4294967295
2000000和上面比起来太少了吧?
youngphoneix 2004-08-18
  • 打赏
  • 举报
回复
map有个max_size()函数,该函数会告诉你在当前的机器上的最大容量

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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