有空多交流
----------------解决方案--------------------------------------------------------
...嘿嘿
正好有空.来讨论下
你对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() 函数),若意外情况或者根本没有检查手动分配的内存是否释放,那将引起最常见的内存泄露问题。
----------------解决方案--------------------------------------------------------