所谓的“内存空间在编译期间完成分配”到底发生了什么?
对于程序中的基本数据类型或者引用类型,的确可以明确它们所占内存空间的大小。我的理解是编译器在编译期间就确定了程序中基本数据类型和引用类型的大小,并在当程序被加载到内存时可以确定的分配一块固定大小的内存空间。作为比较,如果是通过new
动态分配内存的话,在编译期间是确定不了所需内存大小的。因此,"内存空间在编译期间完成分配"并不是指编译器开辟了一块内存空间,而是指编译器在编译期间就知道了程序中的基本数据类型和引用类型将会占据的内存空间大小。
以上是我的理解,不知道对不对?如有偏差,欢迎拍砖,最好能够给出代码来验证,谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
并不是,这里说的能够在编译时能够确认的内存通常是栈内存,这块内存是进栈时一定分配的。而new的操作是在堆上完成的,这块内存允许根据允许环境动态调配,所以在编译器无法确定是否分配。
这里与变量类型毫无关系,基础数据类型也可以出现在堆内存中,也是可以动态分配的。
编译型语言可以产生的程序在结构上有一种结构,在程序载入内存时就会被分配内存。类似C中声明的全局变量,Java中的常量字符串。编译时确定内存就是指这部分