为什么我在堆栈中有填充?

问题描述

我试图了解堆栈(段)的工作原理,并认为它会一个一个地分配每个元素(变量、字节、任何我想分配的东西)。但是在编写以下代码后,我发现了一些奇怪的东西。

var arr = stackalloc int[4];
int i = 3;

arr[4] = 9; // shouldn't this overwrite the int i?

在查看内存时,我注意到我的整数离我的堆栈分配指针很远(在正方形中你可以看到我分配的整数的内存。)

enter image description here

问题

  • 为什么不是在我的数组之后立即分配整数内存?
  • 间的那条线包含什么信息? (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 (将#修改为@)