首页 > 所谓的“内存空间在编译期间完成分配”到底发生了什么?

所谓的“内存空间在编译期间完成分配”到底发生了什么?

对于程序中的基本数据类型或者引用类型,的确可以明确它们所占内存空间的大小。我的理解是编译器在编译期间就确定了程序中基本数据类型和引用类型的大小,并在当程序被加载到内存时可以确定的分配一块固定大小的内存空间。作为比较,如果是通过new动态分配内存的话,在编译期间是确定不了所需内存大小的。因此,"内存空间在编译期间完成分配"并不是指编译器开辟了一块内存空间,而是指编译器在编译期间就知道了程序中的基本数据类型和引用类型将会占据的内存空间大小。

以上是我的理解,不知道对不对?如有偏差,欢迎拍砖,最好能够给出代码来验证,谢谢。


并不是,这里说的能够在编译时能够确认的内存通常是栈内存,这块内存是进栈时一定分配的。而new的操作是在堆上完成的,这块内存允许根据允许环境动态调配,所以在编译器无法确定是否分配。
这里与变量类型毫无关系,基础数据类型也可以出现在堆内存中,也是可以动态分配的。


编译型语言可以产生的程序在结构上有一种结构,在程序载入内存时就会被分配内存。类似C中声明的全局变量,Java中的常量字符串。编译时确定内存就是指这部分

【热门文章】
【热门文章】