博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C#堆栈的几点说明
阅读量:4694 次
发布时间:2019-06-09

本文共 883 字,大约阅读时间需要 2 分钟。

  纠结了几天,幸遇贵人解惑,思路整理如下:

首先,关于堆栈这个东西,先要搞明白的是有2个:

1.数据结构的堆栈,链接:

2.C#的堆栈,就是本文的理解了。

栈上的是值类型、引用类型、指针类型的变量和值,在栈上面进行操作(引用,赋值等等),还有变量都在栈中

堆上的是对象
对象都是new出来的,new出来之后放了堆中。

有一个图书馆的例子很经典:堆就是图书馆中的书,而索引和标记就是栈。操作,查询这些都是栈的事情,

堆只是用来放书这些对象的。(对象是实体的书,指针和引用都是 计算机查找书时的索引和标记。在查找书的时候的相互赋值都是引用之间的操作,

也就是索引值一个数值,在第几行第几列的那种的。但是 入库和借出 这种操作是针对书的所以你得搞清楚,类型、变量、变量的值、操作符是针对什么的 这几个问题。

再如:大神教导用例:

string a = "aaaaa";

class objA = new class();

string 和 class是类型,

a和objA 是变量,
“aaaaa”和new出来的是值//当你说objA怎么怎么样的时候,你得先搞清楚,你说的是这个变量,还是这边变量所指向的值。

像“aaaaa”这种值,是在静态存储区的。

像 new class这种值,是在堆栈的

又如:

Class a = new Class();

Class b = a;

首先,new是一个函数,用来创造对象,返回引用。

所以Class a = new Class();中的Operator的=是针对Class的引用类型。

Class b = a; a和b都是Class的引用类型,所有还是引用的赋值

就跟int一样

但是b.xxx();这种就是调用函数,就是对对象的操作了。//就是说只有a是创建了一个对象,b是引用a但是没有创建对象.

如果说a放到了栈中,那a创建的对象就放在堆中,因为b只是引用的a,没有新创建,所以b和a的赋值操作都是在栈中进行的。

转载于:https://www.cnblogs.com/defoliate/p/3273158.html

你可能感兴趣的文章
使用 CXF 做 webservice 简单例子
查看>>
2017-2018-1 20155339 《信息安全系统设计基础》第8周学习总结
查看>>
socket.io 消息发送
查看>>
C# 两个datatable中的数据快速比较返回交集或差集
查看>>
关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析
查看>>
一些有趣的代码
查看>>
Major Performance Impacts
查看>>
读《图解HTTP》有感-(返回结果的HTTP状态码)
查看>>
操作数栈
查看>>
转:文本分类问题
查看>>
tensorflow_python中文手册
查看>>
Vs2012在Linux应用程序开发(3):加入新平台hi3516
查看>>
adb shell am 的用法
查看>>
实现自动点击
查看>>
MVP开发模式的理解
查看>>
Unity多开的方法
查看>>
File类中的list()和listFiles()方法
查看>>
我的VS CODE插件配置 主要针对.NET和前端插件配置
查看>>
关于js中的事件
查看>>
一致性哈希算法运用到分布式
查看>>