问题标签 [boxing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 拳击..我做对了吗?
可能的重复:
什么是装箱和拆箱,权衡取舍是什么?
嗨,根据我的理解:当我将值类型的数据分配给(引用)类型对象变量时,它会被装箱并且结果不是实际引用,因为它指向存储在堆上的值的副本。是对的吗?谢谢
c# - 铸造,拆箱,转换..?
最近我在学习值类型,我有点困惑。此外,铸造和拆箱都使用相同的语法 - (预期类型)(对象),对吗?那么类型之间的简单转换呢,即转换还是转换?
c# - 对象类型和装箱
MSDN 说
对象数据类型是对象被装箱的类型。
我以为只有值类型是装箱的?现在我有点困惑。那么当我将引用类型变量分配给对象变量时,它的装箱?
c# - Box和UnBox是什么意思?
在 C# 中,sit 是什么意思:“Box and UnBox”?
这是我创建 Text 的 MSDN 的摘录。
但这种便利是有代价的。添加到 ArrayList 的任何引用或值类型都会隐式向上转换为 Object。如果项目是值类型,则在将它们添加到列表时必须将它们装箱,并在检索时取消装箱。铸造以及装箱和拆箱操作都会降低性能;在您必须迭代大型集合的情况下,装箱和拆箱的效果可能非常重要。
谢谢!
c# - 在“out”参数中传递值类型是否会导致变量被装箱?
我知道装箱和拆箱在性能方面相对昂贵。我想知道的是:
将值类型传递给方法的out
参数是否会导致变量的装箱/拆箱(从而影响性能)?编译器可以优化这个吗?
.net - Boxing vs ValueType by reference;有什么不同?
最近有几个关于将 ValueType 装箱为对象的问题,特别是它是否在某些情况下发生。
我意识到我不知道的是,“装箱”ValueType(将其视为引用的对象)和简单地通过引用访问它之间有什么区别,例如使用 ref 或 out 关键字(您传递的只是“指针”)?在这两种情况下,该值都在您可以指向它的某个位置(对于 Object,它是堆,对于本地范围的 ValueType,它是......在哪里,究竟是什么?)。
如果我不得不猜测,根据我对 C++ 的了解,我会说它是这样工作的:通过引用访问的 ValueType(比如说通过 parameter 关键字)保持在其作用域的调用堆栈级别上,但是 "快捷方式”指向该变量在堆栈中的存储桶的指针被创建并成为堆栈下一层的一部分。因为该值已经存储在内存中(甚至可能是 CPU 缓存),所以您不必在堆上实例化新的东西;唯一的新东西是指针,它是它自己的ValueType(一个IntPtr)并且本身存储在堆栈中,所以AFAIK它会比将东西放入堆中更快。
这是正在发生的事情,还是有其他事情正在发生?
编辑:更清晰:
c# - 将类型参数强制转换为基本类型而无需装箱
有没有办法让这样的代码工作:
这里的问题是我不能直接将 B 转换为 long 而不先将 B 转换为对象。我试图不惜一切代价避免装箱,因为它会减慢功能上的很多快速操作。那么有什么方法可以实现这一点吗?
我知道我实际上可以定义一个专门的 Func2 来专门处理 B 为 long 的情况。但随着函数数量的增长,long 和对象的组合呈指数增长——在实际用例中,我还希望支持双精度数!有没有什么方法可以在没有拳击的情况下支持这一点?也许有不安全的代码?
谢谢!考埃
c# - 在 C#/.NEt 中,动态类型占用的空间是否比对象少?
我有一个控制台应用程序,允许用户指定要处理的变量。这些变量有三种形式:string、double 和 long(double 和 long 是迄今为止最常用的类型)。用户可以以任何顺序指定他们喜欢的任何变量,因此我的系统必须能够处理它。为此,在我的应用程序中,我一直将它们存储为对象,然后根据需要进行转换/取消转换。例如:
我的理解是盒装对象比标准值类型占用更多的内存(大约 12 个字节)。
我的问题是:使用动态关键字存储这些值会更有效吗?它可能会解决装箱/拆箱问题,如果它更有效,这将如何影响性能?
编辑
为了提供一些上下文并防止在我最坏的情况下“你确定你使用了足够的 RAM 来担心这个”,我需要担心 420,000,000 个数据点(60 个变量 * 7,000,000 条记录)。这是我保留的关于每个变量的一堆其他数据(包括一些布尔值等)的补充。所以减少内存确实会产生巨大的影响。
c# - C# - 动态参数是否装箱
如果我有:
接着:
12会被装箱吗?想不到,想请教高手。
scala - 如何在反编译的 Scala 代码中识别装箱/拆箱?
在对这个问题的公认最佳回答中,有一个明确的解释为什么会发生拳击。
但是,如果我反编译代码(使用 java 反编译器),我看不到 scala.runtime.BoxesRunTime 的使用。此外,如果我分析代码(使用 JProfiler),我看不到任何 BoxesRunTime 实例。
那么,我如何真正看到装箱/拆箱的证据?