boxing

    1熱度

    1回答

    我正在寫一些內存敏感的代碼,其中由於各種原因,我必須包含一些值類型。此外,經過一些熱身之後,我需要淨新堆分配爲0.在裝箱了N值後,我的算法不需要更多存儲空間,但是這些值必須經常更新。我希望能夠重用已經在堆上創建的框。 下面的代碼表明盒子沒有被重用(我能想象爲什麼不)。是否有不同的技術,我可以重用每個盒子? using System; public class Program { p

    8熱度

    3回答

    我有一些不可複製的類型和消耗以及(也許)產生它的功能: type Foo = Vec<u8>; fn quux(_: Foo) -> Option<Foo> { Some(Vec::new()) } 現在考慮一個類型,是某種概念上非常相似,Box: struct NotBox<T> { contents: T } 我們可以編寫一個功能,臨時移出NotBox的內容

    5熱度

    2回答

    拆箱發生時,將裝箱值的副本轉換爲適當的變量類型,但在堆上的裝箱副本的內存位置會發生什麼情況。 盒裝副本是否保留在該位置並覆蓋堆上的內存?

    3熱度

    1回答

    在瀏覽StackOverflow的我偶然發現了以下的答案: https://stackoverflow.com/a/3817367/162694 // ... removed unneeded code /// This type is intended for private use within Singleton only. type private SyncRoot = class e

    6熱度

    1回答

    做這樣的演員的好方法和工作方式是什麼? seq { yield (box "key", box "val") } |> Seq.cast<string*string> 因爲這看起來非常難看: seq { yield (box "key", box "val") } |> Seq.map (fun (k,v) -> k.ToString(), v.ToString()) 除了這一點: s

    1熱度

    2回答

    使用下面的代碼獲得: val clz = 10L.getClass val ClassTag(clz) 只能得到盒裝類型: java.lang.Long 有沒有更好的解決辦法?或者在Scala中不可能?

    0熱度

    1回答

    裏希特疊加,但是我不能讓在C#中的指針,所以從堆的字段副本堆棧完成(回答here)。 但是,當我這樣做 Console.WriteLine(v + ", " + (Int32)o); 所以,當我做拆箱對象的 「O」,只有指針傳遞,無副本。 「......這需要拆箱操作(但沒有複製操作)......」 (裏希特,129頁) 現在,我的問題是:當返回指針未裝箱值上堆,當它也被複制到堆棧? 感謝 P

    1熱度

    1回答

    我只是偶然發現了以下樣品發出一個奇怪的IL代碼: class Sample { void Foo<T,U>(T t, U u) where U : T { t = u; } } 的IL Foo的身體發出的是 IL_0001: ldarg.2 // u IL_0002: box !!1/*U*/ IL_0007: unbox.any !!0/*T*/ IL_000c:

    -4熱度

    1回答

    我想填充值類型併爲其賦予隱式轉換。不幸的是這樣做會停止表現得像引用類型即 MyTnt i1 = 3; //MyValue has a field value = 3 MyInt i2 = 5; //value = 5 i1 = i2; //both i1 and i2 = 5 i2 = 4; //i1 = 5, i2 = 4; should be i1 = i2 = 4; 是否有可

    -3熱度

    2回答

    如果Integer,Boolean等被稱爲「......拳擊」,如果它們的行爲不像可以通過「通過參考」傳遞盒裝對象並拆箱來改變它們的值,那麼它有什麼意義? 下面是我實際發現的「取消裝箱」的示例並非真正拆箱。 public static void main(String[] args) { Boolean x = true; foo(x); System.out.