如何分配到100M内存

66766 2005-02-17 12:54:28
// 22.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define one 80000
//把上面的数字改大就会出现运行错误,为什么我只能分配到10M内存
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
char * s1[one];
for(int ss1=0;ss1<one;ss1++){
s1[ss1]=(char *)malloc(40);
if(s1[ss1]==NULL) exit(1);}
char * d1[one];
for(int dd1=0;dd1<one;dd1++){
d1[dd1]=(char *)malloc(80);
if(d1[dd1]==NULL) exit(1);}
int * n1[one];
for(int nn1=0;nn1<one;nn1++){
n1[nn1]=(int *)malloc(sizeof( int));
if(n1[nn1]==NULL) exit(1);}
return 0;
}
...全文
512 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
thuers 2005-02-18
  • 打赏
  • 举报
回复
UP
~!
yxf 2005-02-18
  • 打赏
  • 举报
回复
何必那么麻烦,用malloc(1024*1024*100)不就有100MB了吗?

再说,堆栈的空间是可以自己调的,想要100MB,调称100MB不就行了吗
jiewen316 2005-02-18
  • 打赏
  • 举报
回复
char * s1[one]; 这个占了320,000字节
char * d1[one];这个占了320,000字节
int * n1[one];这个占了320,000字节
lovebao 2005-02-18
  • 打赏
  • 举报
回复
Zark(金陵五月) 高,实在是高
Zark 2005-02-18
  • 打赏
  • 举报
回复
在这类问题上空间和时间的取向大多数是矛盾. 从楼主的情况下,他是需要时间复杂度较低,而不太计较空间复杂度的.

在这个基础上,你应该先载入第一个词库,然后将其排序,这样就可以将线性搜索置换成两分搜索.也可以考虑在载入第一个词库时进行HASH处理,做出链表结构,或者在读入就将其置入一个树型结构.
66766 2005-02-18
  • 打赏
  • 举报
回复
谢谢,我准备用两分搜索加内存拷贝试试。
我啃 2005-02-18
  • 打赏
  • 举报
回复
由于调用开辟了太大的空间,所以容易造成死机,而且不容易分配到,不知道你要干什么。
hittwowood 2005-02-17
  • 打赏
  • 举报
回复
呵呵,前几天我也遇到这样的问题..
Zark(金陵五月)说的对..
JasonHeung 2005-02-17
  • 打赏
  • 举报
回复
char * s1[one]; 这个占了320,000字节
char * d1[one];这个占了320,000字节
int * n1[one];这个占了320,000字节
定义成全局的就可以!

shenzhen_1 2005-02-17
  • 打赏
  • 举报
回复
Up!
winstonch 2005-02-17
  • 打赏
  • 举报
回复
同意楼上二位的观点
xuelong_zl 2005-02-17
  • 打赏
  • 举报
回复
char * s1[one]; 这个占了320,000字节
char * d1[one];这个占了320,000字节
int * n1[one];这个占了320,000字节

//=====================================

楼主你这些变量都是局部变量,所以它们的空间被分配在栈
xuelong_zl 2005-02-17
  • 打赏
  • 举报
回复
一楼正解
66766 2005-02-17
  • 打赏
  • 举报
回复
我恰恰需要这么大的内存啊
我要处理若干个总计200万的词库,去除重复大概在100万左右,我需要统计所有词的在小词库中出现的次数。
高效的算法和数据结构不太会:)我现在运行了3个小时了:(
Featured 2005-02-17
  • 打赏
  • 举报
回复
楼上不必如此,分配100MB的内存当然有可能。(比如视频处理之类)
(虽然可能VirtualAlloc分配到虚拟内存上去,但也是内存啊)
再说,仅仅学术上的讨论不要那么非要谈“有用没用”吧
sunshine810 2005-02-17
  • 打赏
  • 举报
回复
再加上一句话!
你这样真的是----毁人不倦
厉害,厉害........
小生不尽佩服!!!!!
sunshine810 2005-02-17
  • 打赏
  • 举报
回复
变量有不不同的区分,同样内存也会将自己分成不同的数据区!
性质不同的变量就会被存储到不同的内存数据区中,特定的数据区的大小由内存决定,
在说编译器在运行的时候会自动检测和优化,使的内存有足够的空间来给其他的程序运行!
这样分配100M的空间,有什么用?再说这样的程序会有人要吗?????
Zark 2005-02-17
  • 打赏
  • 举报
回复
这是由于你在栈上建的变量太大了,而不是你"只能分配到10M的内存".

#define one 80000
char * s1[one]; 这个占了320,000字节
char * d1[one];这个占了320,000字节
int * n1[one];这个占了320,000字节
总计960,000字节,而栈的默认大小是1M.
66766 2005-02-17
  • 打赏
  • 举报
回复
我的设计目的是读取第二个词库的每一个字符串,在第一个词库里查找,如果没找到,添加到第一个词库中。这样能用对分查找吗,好像每次添加,都改变了第一个词库的排序。请问我改用什么算法和数据结构。
xuelong_zl 2005-02-17
  • 打赏
  • 举报
回复
不知道楼主想做什么?
加载更多回复(2)

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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