Начинающий

Applications development, KoOS API questions
  • SoUrcerer, "Ну wine же их как-то грузит? Хотя он ставит какой-то пакет для поддержки pe, вроде..." - Wine использует флаг MMAP_FIXED у системного вызова mmap2, доступного через libc-обёртку mmap; этот флаг означает "выдели память ровно по этому адресу". В Колибри аналогичной возможности нет.
    binfmt-support, входящий в зависимости в wine, нужен ровно для одной вещи - чтобы PE-exe-шники можно было запускать так же, как и ELF, тогда ядро будет преобразовывать запуск ./filename.exe в wine filename.exe вместо необходимости набирать "wine" руками. Приятно, но не то чтобы абсолютно необходимо.
    Сделаем мир лучше!
  • Спасибо за разъяснения.
  • Опять надо бы вернуться к выделению памяти. Программа расчитывает, выделяет память, но эта память выделяется не сразу после памяти программы, а после небольшого пробела. В моём случае программа забирает 2000h памяти. Затем программа выделяет память и её указатель оказывается 3000h. А надо что бы был 2000h. Что бы появился единый блок памяти. По крайней мере очень желательно. Что делать?
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Почему нельзя зарезервировать сразу n мегабайт?
  • Смысл? Вот захотелось проге расположить свою секцию по адресу 0000 и она весит так килобайтиков 50. И... Останется только посмотреть в board на ругательства нехорошие:)
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Или Вы сразу предлогаете проге для запуска забирать n мегабайт? Это уже крайний случай. И сразу пределы размера запускаемых программ(точнее потребления ОЗУ) появляются. И мне так ооочень не нравится.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • А что если в функции "перераспределить блок памяти" в качестве указателя на уже выделенный блок памяти дать 0, т. е. указать на память данную в самом начале?
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • В принципе можно с помощью функции 64.1, но она deprecated и не будет работать совместно с любыми вещами, явно или неявно выделяющими память - собственно выделение/освобождение/перераспределение памяти через 68.12/13/20, загрузка DLL, разделяемые области памяти, TLS. Так что можно считать, что никак.
    Адрес 0 для realloc - специальный, означает, что функция должна просто выделить память.
    Сделаем мир лучше!
  • GerdtR wrote:А что если в функции "перераспределить блок памяти" в качестве указателя на уже выделенный блок памяти дать 0, т. е. указать на память данную в самом начале?
    У меня простой вопрос, Вы физику что ли решили получить по адресу 0x00000000?
    Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!
  • Зачем же физику? Меня интересует только логические адреса. И ещё возникла идея. Если программа сначала подсчитывает все затраты памяти, а затем изменяет заголовок второй проги, которая продолжит загрузку, так, что бы вторая прога сразу забирала необходимую память. Затем программно запускает вторую прогу, а сама выгружается. Пока не реализовал, но, кажется, это должно сработать.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Кстати в realloc при адресе 0 функция возвращала -1. Это что значит?
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • это значит "неверный параметр функции".

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

    Code: Select all

    ; В начале было Слово:
    B32:        mov     ax, os_stack       ; Selector for os
    [/size]
  • Это значит, что вызывалась не функция realloc. Realloc никогда не возвращает -1.
    Сделаем мир лучше!
  • 1. Помогите разобраться: абстрактный класс - это класс на основе которого нельзя создать объект, а можно только наследовать и уже тогда через дочерний класс работать с ним?

    2. Зачем нужен интерфейс, если есть классы? Что он даёт? Только, пожалуйста, по простому.
    Из хаоса в космос
  • Who is online

    Users browsing this forum: No registered users and 7 guests