Если жадность давит на память.. Уменьшить количество используемой.

Тема в разделе "WASM.WIN32", создана пользователем DarkWanderer, 22 сен 2006.

  1. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Есть способы уменьшить количество используемой памяти? Assembler же все таки, а уходят сотни Kb. Открываем окно, еще пару сотен, жалко..
    И какие параметры задать link'овшику дабы выставить выравнивание страниц менее чем страница, слишком много нулей в exe'шнике, а время загрузки не слишком должно упасть, или я не прав?
     
  2. DrSex

    DrSex Юрий

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    98
    Адрес:
    Россия
    А есть резон извращаться, когда дома почти у каждого по гигу оперативы?? 8\

    Правда тут есть еще ЖАДНОСТЬ ..... 8) 8)
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    DarkWanderer
    Выравнивание секций? Есть ключик /ALIGN. Если выставить меньше чем 512 байт для выравнивания в файле и/или меньше 4Кб для выравнивания в памяти, экзешник, скорее всего, перестанет запускаться. Причём в MS link.exe нельзя раздельно задать эти 2 значения.
     
  4. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    DrSex
    ->А есть резон извращаться, когда дома почти у каждого по гигу оперативы??
    А зачем тратить лишний гигабайт памяти, если можно не тратить?

    Quantum
    Спасибо.
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    DarkWanderer
    Выравнивание секций в файле по умолчанию = 512 байт (стандартный размер сектора на диске). Меньше задать нельзя (только для драйверов). А для уменьшения размера нужно для неинициализированных данных использовать отдельную секцию .data? или .bss, + можно использовать слияние секций (/MERGE), ну и извращаться с урезанием DOS-хидера. Поищи по форуму - ты ес-но не первый "озабоченный" этими вопросами :lol:
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    PS:
    Aquila, а куда все-таки делась кнопка редактирования

    DarkWanderer
    Замечание: неинициализированные секции при загрузке заполняются нулями, поэтому в эти секции можно помещать также все, что должно быть инициализировано нулями
     
  7. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    leo
    Ставил ALIGN:16, link пишет ошибку о драйверах, это да. Exe'шник работает нормально. Визуально заметного времени увеличения загрузки нет;))

    Const размещаю в code. В data? только глобальные handle и т.п. все остальное локальное. Это все есть.

    С dos-header не догадался.

    только разрешить запись в секции code.
     
  8. _Raven

    _Raven New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2006
    Сообщения:
    34
    На самом деле можно. Я ставил даже /ALIGN:4 и exe-шник запускался. Правда при етом необходимо самому указать точку входа /ENTRY. Можно еще при линковке прикинуться драйвером - /DRIVER(формально ето будет exe-шник).
     
  9. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Так то все так, однако еще важнее уменьшить используемую память. Счет размера exe'шника идет на килобайты, память же windows меряет мегабайтами.
     
  10. cc

    cc New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2006
    Сообщения:
    34
    DarkWanderer, имхо, особо уменьшить размер потребляемой памяти не получится, так как там резервируется куча, а также различные системные библиотеки, а отказаться от них ты не сможешь
     
  11. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    _Raven
    Я ставил даже /ALIGN:4 и exe-шник запускался.
    Выложи Pls бинарник. У меня с помощью MASM получалось только /ALIGN:16. Наверное надо было FASM+UniLink. Сегодня вечером попробую.
     
  12. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Нда попробыл FASM+UniLink. UniLink не дает делать выравнивание даже 16! Но связкой FASM+link получилось. Секции в Фасм надо присваивать аттрибут align 4:
    Код (Text):
    1. ; example of making Win32 COFF object file
    2.  
    3. format MS COFF
    4.  
    5. extrn '__imp__MessageBoxA@16' as MessageBox:dword
    6.  
    7. section '.text' code readable executable align 4
    8.  
    9.  public _demo as '__demo'
    10.  
    11.  _demo:
    12.     push    0
    13.     push    _caption
    14.     push    _message
    15.     push    0
    16.     call    [MessageBox]
    17.     ret
    18.  
    19. section '.data' data readable writeable align 4
    20.  
    21.  _caption db 'Win32 assembly',0
    22.  _message db 'Coffee time!',0
    , а потом компилим link:
    link /align:4 /entry:_demo /subsystem:windows /opt:noref \masm32\lib\user32.lib mscoff.obj
     
  13. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    cc
    Да, да. Обидно. Отключать библиотеки и вручную искать функции? Нет, вроде, прироста. Может не так делаю?