|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Aleksey Vaneev 2:5003/115.1 11 Feb 2003 00:55:55 To : Michael Ryazanov Subject : Выделение памяти --------------------------------------------------------------------------------
MR> А как это делают на самом деле? Или, может быть, проблема была
MR> только в древних контроллерах, и заморачиваться не надо? :-)
Запрашиваешь памяти в два раза больше, чем нужно, превращаешь пару
сегмент-смещение в линейный адрес и выбираешь ту часть выделенного буфера,
которая находится вне пересечения. О чем ты так скептически и писал.
Вроде бы, это единственный надежный и исторически применяемый метод. Hо минусы,
конечно, есть - размер DMA-буфера не должен превышать 32КБ. Впустую выделяемую
память можно использовать для других нужд.
Пересекать границу, вроде бы, нельзя. Hасколько я помню, это приводило к
исключениям (если EMM386 был загружен, он выдавал какое-то исключение). Вряд ли
кто-то исправлял что-то в контролере с тех пор, потому как требование
непересечения 64КБ сегментов (и, по-моему, 128КБ для 16-битных пересылок) было
везде документировано. А под виндами может быть все проще. Hаверное, можно
схалтурить и использовать любой кусок памяти, а винды сами все правильно
сделают. Hо это не будет работать без виндов.
Да, если имеется в виду пересылка память-память, то об этом нужно забыть - не
работает.
e-mail: picoder at mail ru
--- GoldED+/W32 1.1.5-20020105
* Origin: (2:5003/115.1)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/32483e4811e4.html, оценка из 5, голосов 10
|