gpt4 book ai didi

c# - 什么时候为变量分配内存,是在声明时还是在初始化时?

转载 作者:行者123 更新时间:2023-12-05 02:57:45 24 4
gpt4 key购买 nike

考虑 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com