я на лету пишу в бинарный код и потом его запускаю.мне надо было сделать что-то типа глобальных переменных - я сделал для них место в конце кода и потом туда обращался по указателю, проблема в том что если их сразу разместить после самого кода то при записи в них падает производительность(при чтении все хорошо), а если их сместить на определенное число байт(я подобрал) то начинает все работать. в чем может быть проблема? и как вообще надо правильно размещать их? надо ли их выравнивать?
по 4 байтовой не помогает, помогло по 64 байта, непонятно только почему. а как разделять сегменты? что надо загружать DS и все подобное своими значениями? а что будет с той программой которая вызвала мою ф-ию после того как я сегменты поменяю?
чтоб текущая линейка кэша кода и текущая линейка кэша данных не пересекались. Точнее писать можно, но придется все хорошо проверить, чтоб не глючило. А так.. почему не писать если права позволяют.
Ничего не надо загружать же! В данном контексте сегмент == PE-секция. А как правильно размещать - leo может дать хороший ответ
разделение кода и данных в разные куски размером таким же как размер cache line помогло. а почему не возникает проблем при чтении?
Разнос кода и данных на размер кэш линейки рулит только в P6 (т.к. декодирование команд производится на лету из текущей линейки) и возможно в Атлонах, а вот в P4 осуществляется преддекодирование команд с сохранением мопов в Т-кэше, поэтому дистанция разноса существенно больше. В P4 не должно быть записи в секцию кода в границах текущего килобайта адресов исполняемого кода, иначе будут тормоза. Для атлонов по официальным данным также как м в P6 нельзя писать в текущую линейку кэша. Однако в атлонах юзается преддекодирование команд с сохранением в кэше команд разметки длин инструкций, поэтому есть подозрение, что реальная "защитная" дистанция может быть больше (сам не проверял, но помнится кто-то тут приводил данные, что на атлоне тормоза наблюдаются при модификации кода на расстояниях значительно больших 64 байт) PS: А вот нашел тему, где Ustus над атлонами "издевался" PPS: Мда, а поиска по всем разделам, значит так и нет...
Он не только конвеер сбрасывает, а еще и синхронизирует кэши данных и команд через L2 (или еще хуже через ОЗУ ?). А на P4 к тому же происходит сброс всего T-кэша и проц начинает работать в режиме декодирования команд, что по кр.мере раза в 2-3 медленнее, чем при работе с T-кэшем.