堆栈和堆如何工作,内存存储(重复)[重复]

Posted

技术标签:

【中文标题】堆栈和堆如何工作,内存存储(重复)[重复]【英文标题】:how stack and heap work, memory storing (Duplicate) [duplicate] 【发布时间】:2020-04-24 23:01:29 【问题描述】:
class Calculate

    int result;
    public int add(int m, int n)
    
        result = m + n;
        return result;
    

class Program

    static void Main(string[] args)
    
        int a, b, c;
        a = 10;
        b = 20;
        Calculate obj;
        obj = new Calculate();
        c= obj.add(a, b);
        Console.WriteLine(c);
        Console.ReadLine();
    

这是一个示例代码,我想知道堆栈和堆如何起作用,以及变量,方法,类或对象是谁 获取存储,堆栈如何逐行执行代码 如果创建了 10 个对象,这些对象的存储方式和位置

【问题讨论】:

我发现这个article 很有趣。您需要了解引用类型和值类型之间的区别。然后你就可以回答你的问题了 这能回答你的问题吗? Memory allocation: Stack vs Heap? 【参考方案1】:

所有引用类型(字符串、对象)和静态变量类型都存储在堆上。

堆栈 所有值类型都存储在堆栈中。

int result;

result 也将在堆上,因为它是计算的一部分。

    int a, b, c;
    a = 10;
    b = 20;

a, b, c 都在栈上,因为你在主线程上给这些变量一个值。

    Calculate obj;

obj 将在堆上,因为它是一个引用类型。

更多信息: https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/value-types-and-reference-types

【讨论】:

感谢您提供的信息,但是当只有 int a 时会发生什么;如果在我编写console.write(a)时编译器会抛出错误,那么执行是否会分配内存;没有分配 Int a 没有价值。在堆栈上,您为名为 a 的变量定义空间,但值为空。你还在使用 C# 4 吗?去年 C# 8 出来了。我知道值类型有一个默认值,不应该那样抛出错误。 哦!好的,谢谢你

以上是关于堆栈和堆如何工作,内存存储(重复)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在java中初始化数组时的堆栈和堆内存[重复]

堆栈内存和堆内存之间的区别[重复]

静态成员存储在内存中的啥位置? C#.Net中的堆栈/堆[重复]

堆栈与堆栈和堆与堆

程序栈和堆,它们是如何工作的?

堆和堆栈内存是如何管理、实现和分配的?