Как прочитать количество элементов стека выделенной памяти? - PullRequest
1 голос
/ 09 апреля 2019

Допустим, у меня есть только указатель ранее выделенной памяти стека, и я хотел бы знать, сколько элементов у меня есть. Как это сделать?

MSDN говорит: «использование stackalloc автоматически включает функции обнаружения переполнения буфера в общеязыковой среде выполнения», поэтому я предполагаю, что размер где-то сохраняется.

1 Ответ

3 голосов
/ 09 апреля 2019

Информация, которую вы ищете, не существует, вы несете ответственность за ее отслеживание.

Обнаружение переполнения буфера не проверяет доступ за пределами "массива".- - это без массива.Вместо этого он использует случайное значение, добавленное после выделенной памяти в стеке.В эпилоге функции он проверяет, все ли там значение - и, если нет, убивает весь процесс.

Защита от переполнения буфера для stackalloc в .Net

Нет необходимостискажем, это не гарантирует, что вы не страдаете от переполнения буфера (или недостаточного значения, что является главной проблемой здесь).Он просто пытается ограничить свое потенциальное воздействие.В сочетании с сохранением stackalloc локальных объектов CED в как можно меньших функциях это служит довольно простым, но все же довольно эффективным, предотвращением выполнения вредоносного кода.Вы все еще можете перезаписать (или прочитать) другие локальные объекты, но вы не можете перезаписать, например, указатель возврата функции.

...