问题描述
我试图了解堆栈(段)的工作原理,并认为它会一个接一个地分配每个元素(变量、字节、任何我想分配的东西)。但是在编写以下代码后,我发现了一些奇怪的东西。
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.
然后我的整数实际上被覆盖了。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)