C#struct内存优化?

时间:2014-06-03 09:50:32

标签: java c# optimization struct memory-optimization

我有一份求职面试(?我不确定这是不是这个词) 面试官让我告诉他结构和班级之间有什么不同。

所以我告诉了我所知道的一切以及我在msdn上读过的所有内容。

那家伙说"不够",我没有线索。 所以他说:

结构是优化的,所以如果有和整数和浮点数有一些相同的咬合,那么它将保存这个空间,所以struct with int=0float=0的大小只有int=int.MAX的一半,float=float.MIN

好。所以我很喜欢 - 没有听说过。

然而,在采访之后,我正在思考它并且它对我来说并没有多大意义。这意味着,结构大小不同,而我们正在改变其中某个变量的值。并且它在内存中可能真的处于同一个位置,如果在扩展时发生碰撞会怎样。而且我们必须在某处写一些我们正在滑动的位,不确定它是否会进行任何优化。

另外,他在乞讨时问我,Java中的struct和class有什么不同。我已经回答过,Java中没有结构,他说"不是程序员,而是数字类型是结构"我有点喜欢WTF。

基本上问题是:

这家伙知道的是什么,这很难被人知道(我的意思是,我在网上寻找它,找不到东西)

或许他对自己的工作一无所知,并试图在求职面试中表现得很酷。

2 个答案:

答案 0 :(得分:4)

这家伙似乎对可以应用于C#结构的StructLayoutAttribute感到困惑。它允许您指定结构内存的布局方式,实际上,您可以创建一个结构,该结构具有不同类型的字段,这些字段都从相同的内存地址开始。他似乎错过的部分是你一次只能使用其中一个领域。 MSDN有更多信息here。查看页面底部的示例struct TestUnion。它包含四个字段,均为FieldOffset(0)。如果您运行它,可以将整数值设置为i字段,然后检查d字段并查看它是否已经过了。

答案 1 :(得分:1)

对我来说,看起来(你们其中一个人)并不是在谈论C#结构/类,而是关于更低级别或更普遍的structs

使用这种特殊类型的内存优化,例如在

1。 C(unions

并在

2。 Pascal(variant records

参见例如文章How do I translate a C union into Delphi?为例。

具有动态多态内存分配的这种“结构”的特殊形式称为

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

并且在C#时代之前(几十年来用多种语言),它被大量用于OLE自动化API中的进程间数据交换。

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/)。我投票让面试官知道了很好的面试工作