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

[求助]数组大小问题

热度:98   发布时间:2006-10-22 16:24:10.0
最后结果是两人汗了大半天

有空多交流
----------------解决方案--------------------------------------------------------

...嘿嘿

正好有空.来讨论下

你对malloc和new是怎么理解的.?


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

以前偶写过一篇文章是谈C中的malloc和free两个函数的,发表在这个论坛了,最后偶自己又添加了realloc的机制,不过

没有在论坛上补上,对于new是C++的,偶想差别应该不是很大,因为C++偶还没有学过。反正内存管理部分就是比较难控

制,小心一点就可以了。


----------------解决方案--------------------------------------------------------
你的那个我看过了..

以前我一直认为 new的原理是在其中调用了malloc

可是.最近我看见一点资料.上面说的是new与malloc所分配的内存并不是一个区域的

所以有点迷茫..刚在找资料.好象确实是这样子的.
----------------解决方案--------------------------------------------------------
恩``偶记得在CSDN上也曾看过有人说new和malloc的区别,GOOGLE一下这样的文章应该很多。偶现在也找找。
----------------解决方案--------------------------------------------------------
SUN,真的是一大把。

http://topic.csdn.net/t/20010907/12/276378
http://speechtech.blogchina.com/3106046
http://topic.csdn.net/t/20030608/21/1891715

CSDN论坛讨论的比较多,自己看完后总结成文章会更好。
----------------解决方案--------------------------------------------------------
嘿嘿.我看看先..我没找他俩的区别.只找了new的内部实现.
----------------解决方案--------------------------------------------------------
没有我想要的.你看看这个.
http://os.yesky.com/lin/118/2595618_4.shtml
----------------解决方案--------------------------------------------------------

偶不懂C++

慢慢找下应该有,这些知识往往涉及到操作系统的知识了。


----------------解决方案--------------------------------------------------------
malloc() 函数只能分配(64K 减 1 个字节)的内存,
原因如:
先看 malloc() 函数定义的原型(定义在 malloc.h 头文件内,在 stdlib.h 有同样的定义):
void *_Cdecl malloc (size_t size);

malloc() 函数只带一个参数 size,参数的类型是 size_t,size_t 类型其实是 unsigned int 类型(stdlib.h 头文件中可以找到它的声明处)

int 类型在 Turbo C 2.0 下为 2 字节,unsigned int 可表示值的范围是 0 至 65535,即可说明 malloc() 函数只允许分配 0 至 (64KB - 1字节) 的内存,其实这并非特意安排或者因为 int 类型的巧合,而是因为DOS每单位段大小就是 64KB。若要分配更大的内存空间,可使用远堆分配函数 farmalloc() 函数,它允许分配的内存最高约为 2GB。

需要注意的是:不要让 size 为 0,虽然程序这并不报错,还有就是,size 参数赋给一个负数(如 malloc(-1))也语法是正确的,然而,size 的类型为无符号整型,-1 转换为 unsigned int 后将是一个非常大的正数值。

malloc() 分配的内存由调用者手动去释放(使用 free() 函数),若意外情况或者根本没有检查手动分配的内存是否释放,那将引起最常见的内存泄露问题。
----------------解决方案--------------------------------------------------------
  相关解决方案