当前位置: 代码迷 >> C语言 >> [求助]数组大小问题
  详细解决方案

[求助]数组大小问题

热度:124   发布时间:2006-10-22 17:19:29.0
ChenMo 想请教下您对new和malloc的分配区域有什么见解呢?

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

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


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

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


----------------解决方案--------------------------------------------------------
以下是引用lj_860603在2006-10-22 17:38:14的发言:
还有就是..farmalloc()应该只能在DOS下使用的吧.那别的情况应该怎么办呢?
还有没有可以分配过大内存的办法呢?

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

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


----------------解决方案--------------------------------------------------------

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

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

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

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


----------------解决方案--------------------------------------------------------
平台的不同那自然另当别算。
----------------解决方案--------------------------------------------------------
以下是引用lj_860603在2006-10-22 12:11:21的发言:

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

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

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

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

那二维的怎么写啊??


----------------解决方案--------------------------------------------------------
以下是引用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() 函数。
----------------解决方案--------------------------------------------------------
多谢谢大家的参与 受益匪浅


----------------解决方案--------------------------------------------------------
[QUOTE]区域?他们都是分配堆内存,到底是否都是近堆还是远堆、或一者远一者近,尚未考究。
[/QUOTE]

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

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

  相关解决方案