虽然结构是值类型,但在语法上常常可以把它们当作类来处理。例如,在上面的 Dimensions 类
的定义中,可以编写下面的代码:
Dimensions point = new Dimensions();
point.Length = 3;
point.Width = 6;
注意,因为结构是值类型,所以new 运算符与类和其他引用类型的工作方式不同。new 运算符并
不分配堆中的内存,而是调用相应的构造函数,根据传送给它的参数,初始化所有的字段。对于结构,
可以编写下述代码:
Dimensions point;
point.Length = 3;
point.Width = 6;
如果Dimensions 是一个类,就会产生一个编译错误,因为point 包含一个未初始化的引用--不指
向任何地方的一个地址,所以不能给其字段设置值。但对于结构,变量声明实际上是为整个结构分配
堆栈中的空间,所以就可以赋值了。但要注意下面的代码会产生一个编译错误,编译器会抱怨用户使
用了未初始化的变量:
Dimensions point;
Double D = point.Length;
结构遵循其他数据类型都遵循的规则:在使用前所有的元素都必须进行初始化。在结构上调用
new 运算符,或者给所有的字段分别赋值,结构就完全初始化了。当然,如果结构定义为类的成员字
段,在初始化包含对象时,该结构会自动初始化为0。
结构是值类型,所以会影响性能,但根据使用结构的方式,这种影响可能是正面的,也可能是负
面的。正面的影响是为结构分配内存时,速度非常快,因为它们将内联或者保存在堆栈中。
在结构超出了作用域被删除时,速度也很快。另一方面,只要把结构作为参数来传递或者把一个结构
赋给另一个结构(例如A=B,其中A 和B 是结构),结构的所有内容就被复制,而对于类,则只复制
引用。这样,就会有性能损失,根据结构的大小,性能损失也不同。注意,结构主要用于小的数据结
构。但当把结构作为参数传递给方法时,就应把它作为ref 参数传递,以避免性能损失--此时只传递
了结构在内存中的地址,这样传递速度就与在类中的传递速度一样快了。另一方面,如果这样做,就
必须注意被调用的方法可以改变结构的值。

转载于:https://www.cnblogs.com/opps/p/3726707.html

C# struct 性能损失相关推荐

  1. 装箱与拆箱及其性能损失问题

    首先我想了解一下什么是装箱和拆箱 在类型系统中,任何值类型和引用类型都可以和object类型进行转化,装箱转化 是指将一个值类型显式或者隐式的转化为一个object类型,或者是转化成一个被该值类型应用 ...

  2. 万万没想到:对JS代码混淆,竟造成这样的性能损失?

    我们知道,如果要对JS代码进行保护,最普遍的做法是进行混淆加密. 很多人会有担忧:混淆加密后,会不会造成性能影响?JS混淆会带来多少性能损失? 理论而言,混淆加密会使JS 代码量增加,那么执行时理应有 ...

  3. matlab 4d double,c – 对于 4D阵列MatLab造成巨大的性能损失?

    介绍 我有一个循环数十亿(数万亿)次数的算法并操纵存储在7维[10x10x10x10x10x10x10]中的矩阵,我发现访问7维矩阵中的元素非常慢,很好奇,因为我运行了一些测试来识别访问多维矩阵元素的 ...

  4. #C++# #likely# #unlikely#减少CPU流水线分支预测错误带来的性能损失

    目录 流水线技术 分支预测 什么是likely和unlikely likely/unlikely的原理 likely/unlikely的适用条件 C++20中的likely/unlikely 流水线技 ...

  5. pinpoint原理 APM应用性能管理 性能损失

    目前中文文档较少,github上有中文翻译: https://github.com/naver/pinpoint/wiki#video-clips https://www.gitbook.com/bo ...

  6. 阿里云容器化GPU共享服务已开放!性能无损失,对你的环境无侵入,真正实现AI降本增效...

    杨净 发自 凹非寺  量子位 报道 | 公众号 QbitAI 随着GPU算力越来越强,其成本也越来越高昂. 但有时,执行一个深度学习任务,并不需要占用一整张GPU. 就相当于,你不仅多花了钱,还浪费了 ...

  7. intel cpu 漏洞 linux,Intel CPU架构漏洞越捅越大:打补丁将损失30%性能

    还记得前不久那个被曝光影响大面积Intel Core CPU产品的安全漏洞吗?这貌似只是冰山一角,就在今天人们发现了Intel处理器里一个更为致命的漏洞,从最底端的Pentium,到最新的Coffee ...

  8. Intel CPU架构处理器漏洞越捅越大 打补丁将损失30%性能

    还记得前不久那个被曝光影响大面积Intel Core CPU产品的安全漏洞吗?这貌似只是冰山一角,就在今天人们发现了Intel处理器里一个更为致命的漏洞,从最底端的Pentium,到最新的Coffee ...

  9. 深度干货!如何将深度学习训练性能提升数倍?

    作者 | 车漾,阿里云高级技术专家 顾荣,南京大学副研究员 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 近些年,以深度学习为代表的人工智能技术 ...

  10. 1.0 基础、标示符、常量、数据类型(enum 枚举,struct 结构体)、操作符、循环、数组...

    一.程序 现实生活中,程序是指完成某些事务的一种既定方法和过程,可以把程序看成是一系列动作执行过程的描述. 在计算机世界,程序是指令,即为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集 ...

最新文章

  1. 数据分析之CE找数据大法
  2. 基于Manim针对FT教学过程的一种可行性设计
  3. 变量和函数的定义和声明
  4. 帝国cms微信小程序算命小程序开发之指纹算命实现方法
  5. poj 1324(BFS+状态压缩)
  6. mysql函数 用来查询匹配不到的数据_erlang连接mysql数据库后为什么fetch说匹配不到这个函数...
  7. java获取文件视图_springmvc-直接访问视图文件
  8. springboot maven项目打jar包
  9. 北京小哥在日本召唤出机器飞龙,拿下ICRA 2018最佳无人机论文
  10. 弥合安全和开发间隙的四个关键点
  11. 获得密钥_《哪吒》公映密钥延期一个月?关于“密钥延期”的全揭秘来了
  12. java网页版斗地主_JAVA控制台版斗地主
  13. 直播声音代码html,如何实现在直播中播放音频文件
  14. 常用域名控制面板地址
  15. win10 手动设置 DNS 地址
  16. 特邀嘉宾-著名主持人李艾“每一次登台都是一次成长
  17. DEVC++小游戏狼人杀
  18. Android之HorizontalScrollView(一)
  19. SpringBoot整合ElasticaSearch
  20. 【专业知识问答】问:短路对发电机和系统有什么危害?如何防止发生短路事故?

热门文章

  1. 怎么做应力应变曲线_金属薄板塑性应变比ISO 10113:2020 解读
  2. python高段编程_25个有用的 Python 代码段
  3. 2059 - Authentication plugin ‘caching sha2 password‘ cannot be loaded:
  4. python3 socket sendall_全网最详细python中socket套接字send与sendall的区别
  5. 【渝粤教育】国家开放大学2018年秋季 7389-22T劳动与社会保障法 参考试题
  6. 【渝粤教育】国家开放大学2018年春季 0007-21T文书档案管理 参考试题
  7. 【渝粤教育】电大中专新媒体营销实务 (14)作业 题库
  8. caffe 使用笔记
  9. 【sklearn第三讲】数据预处理
  10. libmesh 实现 流程