| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1570 人关注过本帖
标题:[求助]数组大小问题
只看楼主 加入收藏
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
ChenMo 想请教下您对new和malloc的分配区域有什么见解呢?

还有就是..farmalloc()应该只能在DOS下使用的吧.那别的情况应该怎么办呢?
还有没有可以分配过大内存的办法呢?

[此贴子已经被作者于2006-10-22 17:21:55编辑过]


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-10-22 17:19
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
还有就是..farmalloc()应该只能在DOS下使用的吧.那别的情况应该怎么办呢?
还有没有可以分配过大内存的办法呢?

SUN,那个farmalloc是DOS下,现在象WINDOWS这样的操作系统申请多少内存都一样用malloc就可以了,不是说malloc
申请不了大内存。最大可以申请到4G。


我的原则很简单:不做不喜欢的事!
2006-10-22 17:38
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
以下是引用lj_860603在2006-10-22 17:38:14的发言:
还有就是..farmalloc()应该只能在DOS下使用的吧.那别的情况应该怎么办呢?
还有没有可以分配过大内存的办法呢?

SUN,那个farmalloc是DOS下,现在象WINDOWS这样的操作系统申请多少内存都一样用malloc就可以了,不是说malloc
申请不了大内存。最大可以申请到4G。

你的意思是4个字节 32位的寻址范围吧.


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-10-22 20:18
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 

哈哈.小健.俺算了下..32位的寻址范围是4个G

那么俺就又挑出你一个错误.嘿嘿

[QUOTE]far指针的长度是32位,寻址范围是1M字节。[/QUOTE]

我记得20位才是1M嘛.当时就纳闷来着


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-10-22 20:22
ChenMo
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:481
专家分:10
注 册:2004-4-8
收藏
得分:0 
平台的不同那自然另当别算。

欢迎加入 MVC 技术讨论群(新群:90093426)
2006-10-23 13:49
zgwxwn
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-4-24
收藏
得分:0 
以下是引用lj_860603在2006-10-22 12:11:21的发言:

数组太大,栈溢出了,有几个解决方法:

1。建议用动态分配,int *a = (int *)malloc(70000 * sizeof(int));

2.可以修改你的编译器中规定的栈大小,VC下默认好象是1M,TC似乎是64K。

3。把数组存在静态区域,但最好不要这样做。

那二维的怎么写啊??


coding & enjoying
2006-10-23 13:52
ChenMo
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:481
专家分:10
注 册:2004-4-8
收藏
得分:0 
以下是引用SunShining在2006-10-22 17:19:29的发言:
ChenMo 想请教下您对new和malloc的分配区域有什么见解呢?

还有就是..farmalloc()应该只能在DOS下使用的吧.那别的情况应该怎么办呢?
还有没有可以分配过大内存的办法呢?

区域?他们都是分配堆内存,到底是否都是近堆还是远堆、或一者远一者近,尚未考究。

若说区别,new 与 malloc() 区别是(非常常规的一种认知,也是大家所熟悉的):
new 是操作符,malloc() 是库函数。
new 创建对象时调用构造函数(delete 操作符号引致析构函数被调用),而 malloc() 则不然(且释放需要用配对的 free() 函数)。

Windows 下要分配 2GB 可自由使用的堆(32位寻址可达4GB,2GB 为系统保留)使用 Win32 APIs 堆分配函数 HeapAlloc() 函数。


欢迎加入 MVC 技术讨论群(新群:90093426)
2006-10-23 14:12
zgwxwn
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-4-24
收藏
得分:0 
多谢谢大家的参与 受益匪浅


coding & enjoying
2006-10-23 14:19
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
[QUOTE]区域?他们都是分配堆内存,到底是否都是近堆还是远堆、或一者远一者近,尚未考究。
[/QUOTE]

这么说来 new操作符 的实现并不是利用的malloc

而是用另一种方法来分配内存 并且封装到new操作符中对吗?

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-10-23 15:29
快速回复:[求助]数组大小问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022939 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved