Есть одна задумка(пока только в голове), большая часть рабочего кода, это чтение и запись в память. Скорость выполнения буден не мгновенной.Возможен вариант, что порядка нескольких часов(задача - моделирование некоего процесса). В начале реализую под Win32, но насколько я понимаю менеджер памяти тоже ест прилично,(или я не прав). Насколько под досом(прямая запись и чтение) быстрее будет. Вопрос про скорость памяти.
mono recoder Конечно, под Win32 достаточно много времени уходит на выделение и инициализацию страниц памяти - порядка 10 и более тысяч тиков на одну страницу (на P4 под 98SE и XP SP2), причем как для динамической так и для статической памяти. Но на частоте 1..3ГГц это всего лишь 10..3мкс, поэтому при записи в ОЗУ сотни мегабайт на выделение страниц уйдет лишь несколько десятых долей секунды. Поэтому для блоков памяти в несколько раз меньших объема ОЗУ это не страшно, а для больших размеров лучше сразу ориентироваться на запись данных в файл - иначе можно нарваться на супертормозной свопинг. Ну а если памяти хватает и страницы инициализированы, то менеджер памяти отдыхает и рулит железо (винда правда не спит и периодически норовит прервать идилию, особенно на пеньках с HT . Поэтому тут все зависит от задачи - сколько и откуда читаем и сколько и куда пишем и в каком порядке - оптимизация работы с памятью и кэшем (см. мануалы Intel и AMD по оптимизации, труд К.Касперски и т.п.)
Спасибо за ответ, книжечки эти почитаю как нибудь... но я немного не понимаю механиз страничной переадресации. вот нужно мне выполнить код: mov ax, PTR WORD [adres] Windows должна по идее обработать этот запрос так: 1.Получить дискриптор моего процесса, чего-то там.. 2.Получить смещение адресного пространства моего процесса( у каждого процесса ведь свое адресное пространство? 3.Выполнить: mov ax, PTR WORD[OFFSET+adres] или 1. получить номер страницы, по adress... 2. плучить смещение... Все равно выходит, что на каждую операцию с памятью система выполняет еще ~7 операций. А под DOS можно организовать почти непосредственную работу с физическими адресами. И скорость возрастет многократно!!! 8))))) Я наверно чего-то не понял...
Да, похоже звон ты слышал, но как это работает не представляешь Всю страничную переадресацию выполняет процессор, а задача винды лишь подготовить в памяти соответсвующие структуры Page Directory (католог страниц) и Page Table(s) (таблицы страниц) и при переключении задачи перезагрузить в регистр CR3 (он же PDBR) базовый адрес каталога страниц твоего процесса. Проц кэширует записи PD и PT в TLB, поэтому все преобразования адресов выполняются в среднем достаточно быстро, поэтому в плане трансляции режим реальных адресов ничуть не быстрее. Но вот если запись нужной страницы отсутсвует или она помечена как неприсутсвующая в физ.памяти, тогда проц выдает исключение #PF и тут винда бросается выделять память под страницу и возится с этим достаточно долго (но об этом я уже говорил выше)