我试图了解堆栈(段)是如何工作的,并认为它只会一个接一个地分配每个元素(变量、字节、我想要分配的任何东西)。但是在编写了以下代码后,我发现了一些奇怪的东西。
var arr = stackalloc int[4];
int i = 3;
arr[4] = 9; // shouldn't this overwrite the int i?
在查看内存时,我注意到我的整数远离堆栈分配的指针(在正方形中,您可以看到我分配的整数的内存。)
问题
- 为什么没有在我的数组之后分配整数内存?
- 中间的那条线包含什么信息?(
13 9a 3d 08 31 04 00 00
)
笔记
我的整数始终与我的数组相距“5 个整数”,这意味着每当我将代码更改为此:
var arr = stackalloc int[4];
int i = 3;
arr[9] = 9; // Notice the index 4 is changed to 9.
然后我的整数实际上被覆盖了。