прикладная функция выгружающая драйвер из памяти
А вот при снятии показаний со счетчиков производительности без ассемблера уже не обойтись! Для упрощения программирования можно использовать ассемблерные вставки, хоть это и является признаком дурного тона, затрудняющих перенос программы на другие платформы и препятствующей ее компиляции другим компилятором. Правильным решением было бы создание отдельного ассемблерного модуля, но это слишком хлопотно, тем более, что мы пишем не коммерческую программу, а всего лишь демонстрационный макет.
// ИНИЦИЛИЗАЦИЯ ДРАЙВЕРА 996
if (_996_init()==0) return printf("-ERR: 996 driver not loaded!\n");
// ВЫБОР СОБЫТИЯ ДЛЯ МОНИТОРИНГА И ЗАПУСК СЧЕТЧИКА
_996_select(DCU_MISS_OUTSTANDING, PrefCtrl0);
for(;;)
{
__asm
{
mov ecx, PrefCtrl0 ; // читаем регистр PrefCtrl0...
RDPMC ; // ...и помещаем результат в EDX:EAX
mov _edx, edx ; // сохраняем EDX:EAX в...
mov _eax, eax ; // ...одноименных переменных
}
// анализ кол-ва кэш-промахов
// ===========================
…
Sleep(0);
; // отдаем остаток кванта и спим
}