zoukankan      html  css  js  c++  java
  • 关于stack和Head的思考

     电脑鸟侠(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封拆箱的概念, 不过正常应该是这样的情况处理.. 其它不知道了... 继续睡觉...

  • 相关阅读:
    设计模式-可复用面向对象软件基础笔记
    C#--笔记
    win系统下nodejs安装及环境配置
    三步将Node应用部署到Heroku上 --转载
    Ubuntu 重启命令
    Ubuntu ssh免密登录
    Ubuntu Hadoop环境搭建(Hadoop2.6.5+jdk1.8.0_121)
    Ubuntu vim使用
    Scala学习——array与arraybuffer的区别(初)
    Scala学习——可变参数(初)
  • 原文地址:https://www.cnblogs.com/Bird/p/624280.html
Copyright © 2011-2022 走看看