Page 9 of 12

Re: Начинающий

Posted: Sun Dec 16, 2012 10:43 pm
by GerdtR
1ый совет учел. Сначала помучаю минипрогу. На масме написал. Просто выводит окно. С памятью попробую всё-таки загрузить куда требует экзэшник. А вот с BSD я не знаком. Вообще. Линукс знаю только на уровне начинающего юзера. Поэтому виндовс. У меня все проги или под дос или под вин.

Re: Начинающий

Posted: Mon Dec 17, 2012 9:42 pm
by CleverMouse
SoUrcerer, "Ну wine же их как-то грузит? Хотя он ставит какой-то пакет для поддержки pe, вроде..." - Wine использует флаг MMAP_FIXED у системного вызова mmap2, доступного через libc-обёртку mmap; этот флаг означает "выдели память ровно по этому адресу". В Колибри аналогичной возможности нет.
binfmt-support, входящий в зависимости в wine, нужен ровно для одной вещи - чтобы PE-exe-шники можно было запускать так же, как и ELF, тогда ядро будет преобразовывать запуск ./filename.exe в wine filename.exe вместо необходимости набирать "wine" руками. Приятно, но не то чтобы абсолютно необходимо.

Re: Начинающий

Posted: Mon Dec 17, 2012 11:51 pm
by SoUrcerer
Спасибо за разъяснения.

Re: Начинающий

Posted: Sat Dec 22, 2012 10:34 pm
by GerdtR
Опять надо бы вернуться к выделению памяти. Программа расчитывает, выделяет память, но эта память выделяется не сразу после памяти программы, а после небольшого пробела. В моём случае программа забирает 2000h памяти. Затем программа выделяет память и её указатель оказывается 3000h. А надо что бы был 2000h. Что бы появился единый блок памяти. По крайней мере очень желательно. Что делать?

Re: Начинающий

Posted: Sat Dec 22, 2012 11:32 pm
by SoUrcerer
Почему нельзя зарезервировать сразу n мегабайт?

Re: Начинающий

Posted: Sat Dec 22, 2012 11:44 pm
by GerdtR
Смысл? Вот захотелось проге расположить свою секцию по адресу 0000 и она весит так килобайтиков 50. И... Останется только посмотреть в board на ругательства нехорошие:)

Re: Начинающий

Posted: Sat Dec 22, 2012 11:47 pm
by GerdtR
Или Вы сразу предлогаете проге для запуска забирать n мегабайт? Это уже крайний случай. И сразу пределы размера запускаемых программ(точнее потребления ОЗУ) появляются. И мне так ооочень не нравится.

Re: Начинающий

Posted: Sat Dec 22, 2012 11:51 pm
by GerdtR
А что если в функции "перераспределить блок памяти" в качестве указателя на уже выделенный блок памяти дать 0, т. е. указать на память данную в самом начале?

Re: Начинающий

Posted: Mon Dec 24, 2012 12:20 pm
by CleverMouse
В принципе можно с помощью функции 64.1, но она deprecated и не будет работать совместно с любыми вещами, явно или неявно выделяющими память - собственно выделение/освобождение/перераспределение памяти через 68.12/13/20, загрузка DLL, разделяемые области памяти, TLS. Так что можно считать, что никак.
Адрес 0 для realloc - специальный, означает, что функция должна просто выделить память.

Re: Начинающий

Posted: Mon Dec 24, 2012 7:40 pm
by Artyom
GerdtR wrote:А что если в функции "перераспределить блок памяти" в качестве указателя на уже выделенный блок памяти дать 0, т. е. указать на память данную в самом начале?
У меня простой вопрос, Вы физику что ли решили получить по адресу 0x00000000?

Re: Начинающий

Posted: Tue Dec 25, 2012 12:22 am
by GerdtR
Зачем же физику? Меня интересует только логические адреса. И ещё возникла идея. Если программа сначала подсчитывает все затраты памяти, а затем изменяет заголовок второй проги, которая продолжит загрузку, так, что бы вторая прога сразу забирала необходимую память. Затем программно запускает вторую прогу, а сама выгружается. Пока не реализовал, но, кажется, это должно сработать.

Re: Начинающий

Posted: Tue Dec 25, 2012 12:27 am
by GerdtR
Кстати в realloc при адресе 0 функция возвращала -1. Это что значит?

Re: Начинающий

Posted: Tue Dec 25, 2012 1:02 am
by art_zh
это значит "неверный параметр функции".

кроссмаппинг общих страниц памяти - это везде чисто ядерная фишка.
и в линуксе, и в винде, и вообще.
если твой код сидит в драйвере или в системном модуле - пожалуйста, core/memory.inc тебе в руки.
там есть resize, и remap, и много чего ещё.
но в юзерспейсе оно не надо.

Re: Начинающий

Posted: Tue Dec 25, 2012 12:07 pm
by CleverMouse
Это значит, что вызывалась не функция realloc. Realloc никогда не возвращает -1.

Re: Начинающий

Posted: Sat Jan 05, 2013 1:11 am
by Leency
1. Помогите разобраться: абстрактный класс - это класс на основе которого нельзя создать объект, а можно только наследовать и уже тогда через дочерний класс работать с ним?

2. Зачем нужен интерфейс, если есть классы? Что он даёт? Только, пожалуйста, по простому.