|
|
发表于 2007-6-8 13:48:00
|
显示全部楼层
Re:关于函数内对象的生存问题
楼主要先去理解一下c++的内存模型, 这对你以后理解c++运行状况是很有帮助的.
我简单说点吧:
c++ 分为内存分两种, 一种是静态的(就是程序运行就分配好,然后到程序结束才释放掉的内存), 这个是外部变量,常量,还有函数内static变量等.
一种是动态的.
动态分两种, 一种为栈内存, 一种为堆内存.
栈是一个程序运行就开始分配好的一大段空间(大约2m左右, 可以设置编译器选项调节), 这个空间是提供给函数调用使用的.
比如函数里面定义的变量所需要的空间, 只要一调用这个函数,就开始分配. 当调用该函数结束, 就自动释放掉这个占用的空间, 让其他函数调用来使用. 这种也成为自动内存空间.
但是自动往往并不是那么方便, 因为只要一结束调用, 就失去空间的所有权了, 所以在调用结束之前, 应该想办法将变量的值拷贝出去. 函数返回就是这样的机制. 但是试图返回指向变量的指针, 那是错误的, 因为当函数返回后, 你这个变量的所有权已经归还给系统, 再进行操作是不稳定的.
然后说说堆内存. 操作系统提供一个内存申请的接口, 通过这个接口可以随意分配系统所剩下的没有被分配的内存. 而且, 这些内存的所有权完全由程序员自己所管理, 除非调用释放内存的接口, 否则系统不会占用你所分配的空间.
这个接口, 在c++ 就是malloc函数 和 new关键字 等.
虽然堆内存灵活性最大, 却也是最麻烦的, 因为要你自己负责管理.
|
|