作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑 C# 中的两种情况
案例一
int a;
a = 10;
何时何地为a
分配内存?
案例二
int a = 10;
这两种情况有什么区别,它们在内存分配方面有何不同?
最佳答案
局部变量在执行序言代码时分配在调用堆栈上。因此,在您的函数甚至被调用之前,在当前堆栈帧中为 int 变量(和任何参数)保留了 4 个字节。当堆栈帧被删除时,内存就消失了,这就是函数调用结束时发生的情况。这与您在任何基于堆栈的编程语言(大部分)中看到的行为相同。对于此类一般性问题,最好的办法是使用谷歌搜索其工作原理。
只有在使用 new 时才会分配额外的内存。在使用 new 时,内存在堆中分配,并且引用返回到您的局部变量(在函数调用时分配)。
因此,在回答您的问题时,视情况而定。
局部变量/参数 - 在函数序言代码中Ref 实例 - 在您调用 new 时类型中的字段 - 在创建类型实例时(通过 new)初始化是一个完全独立的过程。 ref 实例需要更深入的讨论。给定以下代码,有 2 个分配。
MyClass instance = new MyClass();
第一次分配是局部变量实例。作为一个 ref 变量,它在堆栈中占用 4/8 字节。第二次分配发生在执行 new 的时刻。堆中的空间是为 MyClass 分配的,您会取回一个引用,然后将其分配给您的(已分配的)局部变量。
当函数调用结束时,实例变量被删除(因为堆栈帧消失了),而 MyClass 的实例将挂起,直到 GC 运行以清理它。
关于c# - 什么时候为变量分配内存,是在声明时还是在初始化时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59642108/
我是一名优秀的程序员,十分优秀!