簡體   English   中英

C#struct內存優化?

[英]C# struct memory optimization?

我接受了緩刑求職面試(?我不確定這是不是這個詞),面試官讓我告訴他結構和班級之間有什么區別。

所以我告訴了我所知道的一切以及我在msdn上讀過的所有內容。

那家伙說“不夠”,我沒有任何線索。 所以他說:

結構是優化的,所以如果有整數和浮點數,它們有一些相同的int=int.MAX ,那么它將保存這個空間,所以int=0float=0int=int.MAXfloat=float.MIN的大小的一半float=float.MIN

好的。 所以我很喜歡 - 沒聽說過。

但接下來,在采訪之后我正在思考它並且它對我來說並沒有多大意義。 這意味着,當我們改變其中某個變量的值時,結構大小會有所不同。 並且它不能真正存在於內存中,如果在擴展時發生碰撞會怎么樣。 而且我們必須寫一些我們正在滑動的位,不確定它是否會給出任何優化。

另外,他在乞討時問我,Java中的struct和class有什么不同。 我已經回答過,Java中沒有結構,他說“不是程序員,而是數字類型是結構”我有點像WTF。

基本上問題是:

這個家伙知道的是什么,這很難被了解(我的意思是,我在網上尋找它,找不到東西)

或許他對自己的工作一無所知,並試圖在面試時看起來很酷。

這個人似乎對可以應用於C#結構的StructLayoutAttribute感到困惑。 它允許您指定結構內存的布局方式,實際上,您可以創建一個結構,該結構具有不同類型的字段,這些字段都從相同的內存地址開始。 他似乎錯過的部分是你一次只能使用其中一個領域。 MSDN 在這里有更多信息。 查看頁面底部的示例struct TestUnion 它包含四個字段,全部使用FieldOffset(0) 如果你運行它,你可以設置一個整數值到i字段,然后檢查d字段,看看它已經chnaged。

對我來說,看起來(你們其中一個)並不是在談論C#結構/類,而是更多的低級或更通用的structs

有這種特殊的內存優化,例如用於

1. C( unions

並在

2.帕斯卡( variant records

參見例如文章如何將C聯合轉換為Delphi? 舉個例子。

具有動態多態存儲器分配的這種“結構”的特殊形式被稱為

3. http://en.wikipedia.org/wiki/Variant_type

它曾被大量用於OLE自動化API中的進程間數據交換,在C#之前的時代(幾十年來以多種語言)。

4. (s)他可能也在討論結構序列化格式與類內存格式(例如參見https://developers.google.com/protocol-buffers/docs/encoding ,例如C#結構序列化)

5.你可能也在討論內部JVM內存分配的差異(參見例如http://blog.jamesdbloom.com/JVMInternals.html ),它提醒我你可能在談論類文件格式和結構的編碼和特殊數字文字與類的編碼( http://blog.jamesdbloom.com/JVMInternals.html#constant_pool

所以在經過5次猜測后,我相信你在與面試官談話的過程中會丟失一些東西,並且他可能會瀏覽你聲稱知道的一個區域而事實證明你沒有。 也可能是因為他開始談論廢話並檢查你的反應。 在任何工作中都不建議在簡歷上說謊你的技能(例如http://www.softwaretestinghelp.com/5-common-interview-mistakes/ )。 我投票讓面試官知道了很好的面試工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM