c#编译器决定自己使用stackalloc吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#编译器决定自己使用stackalloc吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1733字,纯文字阅读大概需要3分钟。
内容图文
![c#编译器决定自己使用stackalloc吗?](/upload/InfoBanner/zyjiaocheng/821/1a1341f3f4dc4922a3aab7d89b738006.jpg)
我找到了一个博客条目,表明有时c#编译器可能会决定将数组放在堆栈而不是堆上:
Improving Performance Through Stack Allocation (.NET Memory Management: Part 2)
这家伙声称:
The compiler will also sometimes decide to put things on the stack on its own. I did an experiment with TestStruct2 in which I allocated it both an unsafe and normal context. In the unsafe context the array was put on the heap, but in the normal context when I looked into memory the array had actually been allocated on the stack.
有人可以证实吗?
我试图重复他的例子,但每次我尝试在堆上分配数组.
如果c#编译器可以在不使用’unsafe’关键字的情况下执行此类操作,我特别感兴趣.我有一个代码正在处理许多小字节数组(8-10个字节长),所以使用堆为每个新字节[…]浪费时间和内存(特别是堆上的每个对象有8字节开销需要垃圾收集器).
编辑:我只是想描述为什么它对我来说很重要:
我正在编写与Gemalto.NET智能卡通信的库,该智能卡可以使用.net代码.当我调用返回某个东西的方法时,智能卡返回8个字节,它描述了确切的返回值类型.这8个字节是使用md5哈希和一些字节数组连接计算的.
问题是,当我有一个我不知道的数组时,我必须扫描应用程序中加载的所有程序集中的所有类型,并且每个我必须计算这8个字节,直到找到相同的数组.
我不知道其他找到类型的方法,所以我试图尽可能加快速度.
解决方法:
从你的行:
I have a code that is working on many small byte arrays (8-10 bytes long)
就个人而言,我更感兴趣的是在代码的不同部分可以重复使用的某个地方分配备用缓冲区(同时处理相同的块).然后你没有任何创建/ GC担心.在大多数情况下(缓冲区用于非常谨慎的操作)和暂存缓冲区,你甚至可以假设它是“全部的” – 即每个需要它的方法都可以假设它们可以从零开始写入.
我在一些二进制序列化代码中使用这种单缓冲区方法(同时编码数据);这是对性能的巨大推动.在我的例子中,我在序列化层之间传递一个“上下文”对象(它封装了临时缓冲区,输出流(带有一些额外的本地缓冲)和一些其他奇怪的东西).
内容总结
以上是互联网集市为您收集整理的c#编译器决定自己使用stackalloc吗?全部内容,希望文章能够帮你解决c#编译器决定自己使用stackalloc吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。