在书写的有这么一句话让我不解,
它说类的静态数据成员是在程序在编译是被分配的内存空间的,在程序结束是释放空间
我的疑惑是程序在编译的时候怎么分配内存空间?
编译不是把我们写的源代码汇编成二进制代码吗,最后成为一个可执行文件。
然后我们双击这个可执行文件,这时候这个可执行文件才被载如内存,只有载如了内存才可以分配空间啊。
关键是程序编译的时候都不在内存中怎么给它分配空间啊?
还望大家不吝赐教!谢谢!
它说类的静态数据成员是在程序在编译是被分配的内存空间的,在程序结束是释放空间
我的疑惑是程序在编译的时候怎么分配内存空间?
编译不是把我们写的源代码汇编成二进制代码吗,最后成为一个可执行文件。
然后我们双击这个可执行文件,这时候这个可执行文件才被载如内存,只有载如了内存才可以分配空间啊。
关键是程序编译的时候都不在内存中怎么给它分配空间啊?
还望大家不吝赐教!谢谢!
解决方案 »
- 跨线程使用套接字问题?
- vc 中运行GLSL错误
- 关于WH_GETMESSAGE钩子
- 再问个ADO的小问题
- 如何把变量传递给视图
- CreateFileMapping/OpenFileMapping/MapViewOfFile代码求助
- 请问各位大侠们,VC++怎样用对话框的形式显示HTML文件?
- 对话框程序中,怎样在一个对话框中调用另一个对话框中的成员变量? <<<<在线等待>>>>
- 关于单击列表中的图标,其所显示的被选中的样子,谢谢
- \VC98\Lib目录下面有许多lib文件,都是干什么用的?任何一个程序都依赖这些lib吗? \VC98\CRT下面还有c源文件,又是干什么用的?
- C++基础问题,大家看看
- 抓取的网页返回404错误,急啊!!
所谓的分配内存空间就是给他分配一个固定的地址,不光静态数据成员是,函数中使用的成员都是编译时分配的;
这里说的编译时分配主要区别于你使用malloc或者new这样的动态分配(动态分配,运行时分配),malloc和new在编译时不能确定要分配多少,所以编译器就无法确定要给它那个地址
段地址是程序运行时操作系统分配的。
malloc,new这种操作是在操作系统的内存堆(heap)上分配的。
为什么编译器不能确定malloc和new要分配多少呢?
在程序在运行的时候,静态数据成员是从一开始就分配了空间了的,直到程序结束时释放空间。解释:这个不同函数里面声明的变量,函数里面声明的变量,是调用函数的时候,才分配的。这个样,你理解了吧。当然,原来的那句话也是对的,编译的时候,也是先把他们放到内存里面的,要不怎么编译?所以,这个时候,也是先把静态的成员放到一个地方处理。至于malloc这样的动态分配,编译时是不分配的吧,这个很好理解啊,编译就是转换成二进 制代码嘛, 怎么会管你运行的结果呢?而malloc运行的结果是分配内存嘛。所以编译时当然编译器不管这个问题了
为什么编译器不能确定malloc和new要分配多少呢?你查一下malloc参数,是个变量!所以没办法确定要分配多少,只有运行时,变量有了具体指才知道大小