0

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

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.

然后我的整数实际上被覆盖了。

4

0 回答 0