Начинающий
-
1ый совет учел. Сначала помучаю минипрогу. На масме написал. Просто выводит окно. С памятью попробую всё-таки загрузить куда требует экзэшник. А вот с BSD я не знаком. Вообще. Линукс знаю только на уровне начинающего юзера. Поэтому виндовс. У меня все проги или под дос или под вин.Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
SoUrcerer, "Ну wine же их как-то грузит? Хотя он ставит какой-то пакет для поддержки pe, вроде..." - Wine использует флаг MMAP_FIXED у системного вызова mmap2, доступного через libc-обёртку mmap; этот флаг означает "выдели память ровно по этому адресу". В Колибри аналогичной возможности нет.
binfmt-support, входящий в зависимости в wine, нужен ровно для одной вещи - чтобы PE-exe-шники можно было запускать так же, как и ELF, тогда ядро будет преобразовывать запуск ./filename.exe в wine filename.exe вместо необходимости набирать "wine" руками. Приятно, но не то чтобы абсолютно необходимо.
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 - специальный, означает, что функция должна просто выделить память.
Адрес 0 для realloc - специальный, означает, что функция должна просто выделить память.
Сделаем мир лучше!
У меня простой вопрос, Вы физику что ли решили получить по адресу 0x00000000?GerdtR wrote:А что если в функции "перераспределить блок памяти" в качестве указателя на уже выделенный блок памяти дать 0, т. е. указать на память данную в самом начале?
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!
Зачем же физику? Меня интересует только логические адреса. И ещё возникла идея. Если программа сначала подсчитывает все затраты памяти, а затем изменяет заголовок второй проги, которая продолжит загрузку, так, что бы вторая прога сразу забирала необходимую память. Затем программно запускает вторую прогу, а сама выгружается. Пока не реализовал, но, кажется, это должно сработать.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Кстати в realloc при адресе 0 функция возвращала -1. Это что значит?
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
это значит "неверный параметр функции".
кроссмаппинг общих страниц памяти - это везде чисто ядерная фишка.
и в линуксе, и в винде, и вообще.
если твой код сидит в драйвере или в системном модуле - пожалуйста, core/memory.inc тебе в руки.
там есть resize, и remap, и много чего ещё.
но в юзерспейсе оно не надо.
кроссмаппинг общих страниц памяти - это везде чисто ядерная фишка.
и в линуксе, и в винде, и вообще.
если твой код сидит в драйвере или в системном модуле - пожалуйста, core/memory.inc тебе в руки.
там есть resize, и remap, и много чего ещё.
но в юзерспейсе оно не надо.
Евангелие от Иоанна: стих 1[/size]
Code: Select all
; В начале было Слово:
B32: mov ax, os_stack ; Selector for os
Это значит, что вызывалась не функция realloc. Realloc никогда не возвращает -1.
Сделаем мир лучше!
1. Помогите разобраться: абстрактный класс - это класс на основе которого нельзя создать объект, а можно только наследовать и уже тогда через дочерний класс работать с ним?
2. Зачем нужен интерфейс, если есть классы? Что он даёт? Только, пожалуйста, по простому.
2. Зачем нужен интерфейс, если есть классы? Что он даёт? Только, пожалуйста, по простому.
Из хаоса в космос
Who is online
Users browsing this forum: No registered users and 7 guests