Re: Asembler



On Mon, 18 Nov 1996, Robert Richard George 'reptile' Wal wrote:

> Ludzie, przeciez facet wyraznie sie pytal, jak ma uzyc
> AllocDosObject()

Tak? Mnie sie wydaje, ze on tylko o niej wspomnial, w charakterze
sugestii...

> , bo to jest JEDYNA LEGALNA metoda przydzielania
> miejsca pod rozne struktury dos.library...

Ciekawe, bo ta funkcja jest dostepna dopiero od OS 2.0, a FileInfoBlock to
chyba gdzies od poczatku. Jak wiec nalezalo przydzielac pamiec pod nia w
starszych systemach, np. OS 1.3?

> A po co te jaja z MEMF_PUBLIC??? A niech
> ktos, kto uzywa VMM sprobuje uruchomic taki program, ktory alokuje
> sobie FileInfoBlock na stosie, albo w kodzie programu, z dostepem do
> pamieci wirtualnej... Zycze ladnego GURU...

A ja Ci sugeruje, zebys na przyszlosc sprawdzal to, co piszesz. Oczywiscie
zadnego GURU nie bedzie - VMM nie wymaga, aby pamiec uzywana do
komunikacji miedzyprocesowej miala atrybut MEMF_PUBLIC.

Zasadniczo masz racje: jezeli fragment pamieci jest uzywany przez wiecej
niz jeden proces, powinien byc przydzielony z uzyciem MEMF_PUBLIC. Jezeli
wiec przydzielamy go eksplicite, z uzyciem AllocMem(), to nie zaszkodzi
ten znacznik ustawic - to w koncu (prawie) nic nie kosztuje...

Jednak *wymog*, aby pamiec uzywana do komunikacji miedzyprocesowej byla
MEMF_PUBLIC, bylby paranoja. Na liscie ADE pojawil sie swego czasu
znakomity przyklad:

file=Open("file_name", MODE_OLDFILE);

Calkowicie legalne, co? Ale "file_name" to string, znajdujacy sie w hunku
kodu lub danych, a przydzielanie ich jako MEMF_PUBLIC nie ma oczywiscie
wiekszego sensu. Nazwa pliku jest przekazywana do filesystemu, ktory jest
osobnym procesem. Gdybys wiec chcial byc w zgodzie z ta regula, trzeba by
to zaprogramowac tak:

ptr=AllocMem(strlen("file_name"), MEMF_PUBLIC);
if (!ptr)
        abort();
strcpy(ptr, "file_name");
file=Open(ptr, MODE_OLDFILE);

Znasz kogos, kto tak programuje? Ja nie.

/ Kamil Iskra - AMIGA 1200, 68030 50MHz, HDD 1.2 GB, 18 MB RAM \
| iskra@student.uci.agh.edu.pl  kiskra@ernie.icslab.agh.edu.pl |
| http://student.uci.agh.edu.pl/~iskra                         |
\ PGP public key available via Finger or WWW                   /