如何读取堆栈分配内存的元素计数?

时间:2019-04-09 07:49:45

标签: c# stackalloc

比方说,我只有以前分配给堆栈的内存的指针,我想知道我有多少个元素。怎么做?

MSDN说:“ stackalloc的使用会自动在公共语言运行库中启用缓冲区溢出检测功能”,所以我猜它的大小保持在某个位置。

1 个答案:

答案 0 :(得分:3)

您要查找的信息不存在,这是您的责任。

缓冲区溢出检测不检查“数组”上的越界访问-此处没有数组。相反,它使用在堆栈上分配的内存 之后添加的随机值。在函数Epilog中,它检查该值是否仍然存在-如果不是,则终止整个过程。

Buffer overflow protection for stackalloc in .Net

不用说,这并不能确保您不会遭受缓冲区溢出(或下溢,这是这里的主要问题)。它只是试图限制其潜在影响。与使stackalloc ced本地人保持尽可能小的功能相结合,这可以非常简单但仍然非常有效地防止恶意代码执行。您仍然可以覆盖(或读取)其他本地语言,但不能覆盖例如函数返回指针。