【发布时间】:2017-05-18 15:38:23
【问题描述】:
我知道Marshal.SizeOf() 和sizeof() 有多么根本的不同。但是在IntPtr 的情况下,无论 CPU 架构如何,它们都总是返回完全相同的东西吗?
【问题讨论】:
-
你的意思是它总是
4(32x) 还是8(64x)?你很幸运IntPtr结构不需要more managed memory,但它可能有一天或在某个平台上,最好继续使用合适的。 -
你能解释一下为什么你关心内存大小和线上大小是否相同吗?你只是问一个琐碎的问题,还是你的问题有什么目的?
-
@EricLippert 主要是要弄清楚,特别是考虑到
IntPtr,Marshal.SizeOf()和sizeof()是否可以互换。如果不是,为什么要使用一个而不是另一个。 -
等等,你在问题中说我知道它们有多么根本不同。如果您认为它们可能可以互换并且不知道何时会使用其中一种,那么您知道它们有何不同?
-
假设我有一个函数告诉我一个烤面包机占用了多少柜台空间,另一个函数告诉我邮寄烤面包机需要多大的盒子。问“对于这个特殊的烤面包机,这两个尺寸是否相同”有什么意义吗?也许他们是,也许他们不是,但是你为什么要关心?您会在布置厨房时使用第一种方法,而在包装邮车时使用第二种方法,而且您永远不会交换它们,因为那是一个非常糟糕的主意。