现在,我已经在几个地方阅读过,该结构的最大实例大小应为16个字节。
但是我看不到数字(16)的来源。
在网上浏览时,我发现一些人认为这是性能良好的近似值,但Microsoft认为这是一个严格的上限。 (例如MSDN)
有人对它为什么是16字节有明确的答案吗?
最佳答案
这只是性能的经验法则。
关键在于,因为值类型是按值传递的,所以如果将结构传递给函数,则必须复制结构的整个大小,而对于引用类型,则仅需要复制引用(4个字节)。尽管由于删除了一个间接层,所以一个结构可能会节省一些时间,因此即使它大于这4个字节,它也仍然比传递引用更有效。但是在某些时候,它变得如此之大,以至于复制成本变得明显。通常的经验法则是,这种情况通常发生在16个字节左右。选择16是因为它是一个很好的整数,是2的幂,并且备选方案是8(太小了,会使结构几乎无用)或32(此时复制结构的成本已经成问题了)如果出于性能原因使用结构)
但最终,这是性能建议。它回答了“使用哪种最有效的方法?结构或类?”的问题。但是它没有回答“哪个最能映射到我的问题域”的问题。
结构和类的行为不同。如果您需要某个结构的行为,那么无论大小如何,我都会说要使其成为一个结构。至少在遇到性能问题之前,对代码进行概要分析,并发现结构存在问题。
您的链接甚至说这只是性能问题: