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

发布于 2022-09-03 03:26:29 字数 290 浏览 9 评论 0

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

樱桃奶球 2022-09-10 03:26:29

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

混吃等死 2022-09-10 03:26:29

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文