Мой код, как показано ниже:C++ проблема распределения памяти
#include <string.h>
int main()
{
int ii = 123;
char str[7] = "";
strcpy(str,"123456");
return 0;
}
я запускаю это в VS2010, память, как показано ниже
Мне интересно то, что cc
в памяти используется для? И как рассчитывается количество cc
?
И почему MS выбрала '0xCC' как значение заполнения? Потому что '0xCC' - однобайтная команда точки останова в наборе команд x86. Таким образом, если вы случайно выполняете незаполненную память, она мгновенно попадает в точку останова. –
@Rob Что я не знал. :) Полагаю, теперь это менее актуально, когда у нас есть защита памяти? – Mysticial
@Mysticial: не реально: это работает только на уровне страницы (вся страница может быть помечена как исполняемая или нет, и только если процессор, ОС и процесс согласны разрешить NX-бит). Но что, если вы используете 40 байт кода из 2KB-страницы? Страница должна быть отмечена как исполняемая, остальная часть исполняемой страницы, но содержащая мусор :) – jalf