Задача может показаться странной, но у нее есть практическое применение.
Задан достаточно большой массив, который в цикле постоянно изменяется функцией ChangeValue, которая может изменить в этом массиве как один элемент, так и несколько. Также она может ничего не менять.
Требуется внешними (относительно функции ChangeValue, сама функция для нас черный ящик) средствами определить какие элементы были изменены.
Прошу подсказать любые идеи по реализации такого отслеживания, за исключением тривиального варианта - сравнения значения массива до и после функции, это слишком медленно.
Реализуемо ли:
Отслеживание на уровне системных страниц?
Передача в функцию имитатора изменяемого массива?
Запуск в виртуальной среде?
и т.д.
Ниже приведен пример программы:
void ChangeValue(int * values) {
// работает как черный ящик
// мы не знаем ТОЧНО какие элементы меняет эта функция
}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR, int)
{
while (true) {
int values[100000000] = {0};
ChangeValue(values);
// здесь требуется узнать какие элементы были изменены
}
return 0;
}
PAGE_GUARD - хорошее решение. В случае, если в массиве изменяется не более 10% данных перехват исключений, связанных с PAGE_GUARD дает двукратное увеличение скорости.
Правильный же ответ: пользоваться функциями GetWriteWatch и ResetWriteWatch. Это предоставляемый системой способ отслеживания изменения памяти на уровне страниц. Работает максимально быстро.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как добавить полосу прокрутки на форму в Qt? Добавил verticalScrollBar на формуКак его активировать? Подскажите пожалуйста)
Выдает ошибку исполнения задачиУ меня на компиляторе все результаты тестов совпадают, а система выдает "ошибка исполнения"
Есть бизнес, в котором пользователь, зарегистрировавшись (используя почту и пароль) может получить консультацию специалиста в неком чате
Есть известная игра CS:GO в которой можно хостить свои сервера и добавлять на них плагиныЭти плагины пишутся на C++ (plugin wiki), существует даже проект...