海贼精神  
骂别人不革命,便是革命者,则自己不做事,而骂别人的事做得不好,自然便是更做事者。 若与此辈理论,可以被牵连到白费唇舌,一事无成,也就是白活一世,于己于人,都无益处。 我现在得了妙法,是谣言不辩,诬蔑不洗,只管自己做事。 ——鲁迅1934年6月21日信

 电脑鸟侠(114283) 00:21:53
咱们的程序在内存里边分三快, code segment, stack, 和Heap.
在C语言里如果读入函数或者是套接函数, 就把变量和函数加入到stack头部. 析构(删除)的时候由程序员显式调用. 读入全局变量和static静态变量时候加入到head里

在.NET和JAVA这种虚拟机情况下, 只把所有变量类型和对象地址存在Stack. 然后把对象的具体存储在head, 以方便垃圾回收机制(我似乎记得head只能存放1M内容, 如果对象大于1M呢?...)

在系统中看, head存放用户定义的空间, 比如C语言的申请内存malloc和释放内存free, 而把变量和参数还有函数放入stack, stack安排的空间大, 效率高, 以适应经常的push和pop
 
 电脑鸟侠(114283) 00:29:30
系统里的head总共有5个,
用户堆 64KB 
窗口堆 2MB
用户菜单堆 2MB
GDI堆 64KB
GDI II堆 2MB

如果任何一个用完就会报虚拟内存不足, 所以程序经常会出现没有释放资源的时候很容易把某一个资源用完抛出: 虚拟内存不足. 而且似乎最搞笑的是, .NET把具体实现放在head里, 所以复杂同等的C++程序没办法同等实现.NET..... 


(2007-01-19 00:46:56)   电脑鸟侠(114283)
关于按值传递和按引用传递, 应该和标准方法一样,  系统和C++是放在stack,不过按值传递是先准备一个副本, 按引用传递是准备一个指针指向原本, 我不是太了解.NET封拆箱的概念, 不过正常应该是这样的情况处理.. 其它不知道了... 继续睡觉...

posted on 2007-01-19 00:34  阿鸟  阅读(1020)  评论(1编辑  收藏  举报