Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср апр 24, 2024 02:19

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Вопросы по устройству СПФ4
СообщениеДобавлено: Вт фев 27, 2007 21:34 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Кто-нибудь может объяснить причину, по которой слово _WIN: из spf_win_defwords.f использует процедуру LoadLibrary вместо GetModuleHandle? Из описания winapi я так понял, что LoadLibraryA должно один раз при загрузке либы запускаться, а потом им пользоваться нельзя, так как увеличиваестя счетчик использования DLL и она не выгружается из памяти после окончания процесса.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 27, 2007 22:18 
Не в сети

Зарегистрирован: Пт июн 23, 2006 14:05
Сообщения: 126
Благодарил (а): 1 раз.
Поблагодарили: 16 раз.
Потому что хэндл надо где-то хранить... А в ядре надо все делать просто.
Одним хэндлом обходятся либы ~ac/lib/win/dll/load_lib.f и ~ac/lib/ns/dll-xt.f , прошу любить и жаловать.

При окончании процесса все хэндлы автоматом закрываются, поэтому и все загруженные либы выгружаются автоматом, так что читайте описание winapi внимательнее.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 27, 2007 22:27 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
я как раз внимательно читаю. Написано, что либа выгружается из памяти только когда reference count равна 0. А мы ее каждым LoadLibrary увеличиваем. И, речь идет о памяти системы, а не программы. Так вот при выходе из процесса вызывается FreeLibrary которое уменьшает на 1 reference count, а не возвращает его в сосотяние, до загрузки процесса!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 27, 2007 22:33 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
mOleg писал(а):
я как раз внимательно читаю. Написано, что либа выгружается из памяти только когда reference count равна 0. А мы ее каждым LoadLibrary увеличиваем.


А система помнит, сколько раз данный процесс счетчик увеличивал и уменьшает его при выгрузке на столько же. (в смысле, так должно быть, а как реально - не знаю.)
А если счетчик обнулился, тогда либа и выгружается...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 27, 2007 22:41 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
"А система помнит, сколько раз данный процесс счетчик увеличивал и уменьшает его при выгрузке на столько же?"

Если бы было написано, что это так, я бы вопрос не задавал. То же, что написано как раз можно трактовать, что не помнит система нихчего вобщем.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 27, 2007 22:49 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
mOleg писал(а):
Если бы было написано, что это так, я бы вопрос не задавал. То же, что написано как раз можно трактовать, что не помнит система нихчего вобщем.


Если это так, тогда "это дуррацкая система!"

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 27, 2007 23:03 
Не в сети

Зарегистрирован: Пт июн 23, 2006 14:05
Сообщения: 126
Благодарил (а): 1 раз.
Поблагодарили: 16 раз.
ВСЕ открытые процессом хэндлы закрываются при завершении процесса. У нас по одному хэндлу на каждую функцию API. Все эти хэндлы закрываются системой. В результате никаких ссылок на dll не остается.

Выгружается и всё то, что система загружала для процесса неявно - хотя бы потому, что это больше негде держать :) - ведь все страницы, выделенные процессу (для кода, данных, хипа и т.д.), в т.ч. в системной области памяти (выше 0x80000000) для системных dll и их per process служебных данных освобождаются.

Если в описании написано так, что можно неоднозначно трактовать, то верьте хотя бы практике SPF-программеров, использующих SPF-Win32-программы 10 лет на 10 000 компьютерах.

В редких случаях нужно самому гарантированно выгрузить dll _в процессе_ работы программы без её завершения (в Eserv при обновлении антивирусных баз требуется "перезагрузить" dll'ки антивирусов) - в этих случаях удобнее ~ac/lib/win/dll/load_lib.f, чтобы не бегать за каждым хэндлом.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 27, 2007 23:09 
Не в сети

Зарегистрирован: Пт июн 23, 2006 14:05
Сообщения: 126
Благодарил (а): 1 раз.
Поблагодарили: 16 раз.
WingLion писал(а):
Если это так, тогда "это дуррацкая система!"

Вот я тоже хотел дополнить - если что-то двусмысленно описано, то следуй здравому смыслу.

Можно по-разному относиться к Windows вцелом. Но ядро системы писали профессионалы высшего класса, с опытом разработки других ОС (не DOS, а VAX/VMS и Unix :), не подкопаешься. Это точно НЕ дурацкая система. Пожалуй даже "самая недурацкая" из существующих ;)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 28, 2007 01:27 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Еще один вопрос по поводу ассемблера.
Что-то никак не соображу, как можно сделать такую штуку:

Код:
CODE test
                 MOV EAX, [@@1]
              RET
           @@1: NOP NOP NOP NOP

то есть мне нужно положить в регистр содержимое, за меткой.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 02, 2007 16:05 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
mOleg писал(а):

Код:
CODE test
                 MOV EAX, [@@1]
              RET
           @@1: NOP NOP NOP NOP

то есть мне нужно положить в регистр содержимое, за меткой.

Код:
CODE test
     MOV EAX , 0
  A; HERE 4 -
     RET
  A; HERE SWAP ! NOP NOP NOP NOP
END-CODE


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 25, 2007 12:35 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Есть ли возможность сделать аналогичное?
Код:
: tst 0x90 C,      ; IMMEDIATE

но число что бы можно было задавать, что то типа:
Код:
0x90 : tst C,      ; IMMEDIATE


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 25, 2007 12:50 
Pretorian писал(а):
Есть ли возможность сделать аналогичное?
Код:
: tst 0x90 C,      ; IMMEDIATE

но число что бы можно было задавать, что то типа:
Код:
0x90 : tst C,      ; IMMEDIATE


А слово LITERAL не подойдет?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 25, 2007 13:45 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Pretorian писал(а):
Есть ли возможность сделать аналогичное?
Код:

: tst 0x90 C, ; IMMEDIATE


но число что бы можно было задавать, что то типа:
Код:

0x90 : tst C, ; IMMEDIATE


Какая конечная цель использования этого кода?

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 25, 2007 14:35 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Скажем: проблем с таким нет:
Код:
: eax 0 ; IMMEDIATE
: push   ( r -> )
   0x50 OR C,   ; IMMEDIATE
eax push


а вот такое не пройдет:
Код:
30 push

и как такое сделать?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 25, 2007 14:42 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Pretorian писал(а):
и как такое сделать?


Я бы сделал так:

Код:
REQUIRE NUMBER?     ~mak\LIB\FPCNUM.F

: $ HEX NextWord NUMBER? DROP D>S DECIMAL ; IMMEDIATE

$ 7 push
$ 7 - ЭКВИВАЛЕНТНО 0x7

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB