【发布时间】:2016-01-19 03:48:36
【问题描述】:
问题
当 C# decimal 是局部变量时,它的值是否存储在堆上?
我(相信)知道的事情
-
decimal结构具有16 bytes。 -
ValueType类型的局部变量的值存储在堆栈中,decimal继承自ValueType。 - 对于
ValueTypes,这是存储值的位置;对于引用类型,这是存储null或对堆内存位置的引用的位置。
16 字节大的decimal 的值如何存储在堆栈中,而 32 位系统上只有 4 字节可用?
我的思路哪里出错了?
我读到的
- Memory in .NET - what goes where - Jon Skeet
- Arrays, heap and stack and value types - Stackoverflow
- Do value types (Integer, Decimal, Boolean, etc…) inherit from Object? - Stackoverflow
- 以及互联网上的其他文章...
【问题讨论】:
-
"在 32 位系统上,内存空间只有 4 个字节大。"你能告诉更多吗?
-
@codroipo:让我研究一下……
-
堆栈变量可以大于 4 个字节。我认为您误以为它在 32 位系统上限制为 4 个字节。
-
Quote: 在32位系统上,内存空间只有4个字节大。你指的是什么内存空间???我想说:在 32 位系统上,指针的维度是 4 字节。即您只能寻址 2^32 个不同的内存位置。
-
一个 reference 存在于堆栈中,在 32 位系统上是 4 个字节。这就是你的插图所显示的。但是,堆栈上的值类型几乎可以是任意大小。
标签: c# stack heap-memory