union

Тема в разделе "WASM.BEGINNERS", создана пользователем qwertyui, 6 мар 2009.

  1. qwertyui

    qwertyui New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2009
    Сообщения:
    28
    Код (Text):
    1. union Misc
    2.          PhysicalAddress dd ?
    3.          VirtualSize dd ?
    4.       ends
    как сие будет выглядеть на фасме? и вообще что делает оператор union?
     
  2. qwertyui

    qwertyui New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2009
    Сообщения:
    28
    Ребят ну что никто не знает?
     
  3. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    какая те разница как это выглядти если ты не знаеш что это такое %)
    и почитай справку к фасму или макросыего посмотри, там это есть

    union U
    field_2 dd ?
    field_2b db ?
    ends

    и PE заодно получше изучи, там этот юнион нах не нужен
     
  4. qwertyui

    qwertyui New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2009
    Сообщения:
    28
    ну если задал вопрос значит есть разница? подскажите если не сложно.
     
  5. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
     
  6. qwertyui

    qwertyui New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2009
    Сообщения:
    28
    ну и ? я ж сказал что не знаю что делает union мне это и надо понять
     
  7. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    как я понимаю тоже самое что и структура.
     
  8. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    все поля юниона начинаются с одного адреса
     
  9. barton

    barton New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2008
    Сообщения:
    164
    Адрес:
    Czechoslovakia
    Union - это объединение. Union - это одни и те же данные в разных представлениях. Размер union'а - размер самого большого поля.
    В SDK это определено как
    и означает, что на самом деле PhysicalAddress и VirtualAddress это одно и тоже поле, называющееся по-разному.

    Юнионы полезны, например в типах вроде VARIANT, когда есть поле VariantType (string,int,array,dispatch,etc.) и поле, в котором содержится информация, зависящая от типа (VariantType):

    Тоесть все поля, что перечислены в юнионе - это одно и тоже поле (физически).
     
  10. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    юнион можно (а м.б. и нужно) выкинуть нафик и оставить вместо него одно из его полей.

    а также имеют одинаковый размер
     
  11. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    barton
    Выражу мысль немного другими словами )))
    Иногда в программе полезно обращаться к одному участку памяти по разному! Иногда это хочется интерпретировать как 4 байта, а иногда хочется как два слова, а иногда и как одно двойное слово! Вопрос как это сделать если у нас всего четыре байта ? Тогда на помощь приходит "Объединение концепций" в одном случае это концепция указателя, который можно зачитать и кинуть в переменную. Но иногда хочется понимать это как 4 байта и к примеру распечатать на стандартном выводе(читай дисплэй экрана). А не редко возникает потребность понимать одну область памяти, но под разными именами. К примеру в одной программе это характеристика, а вдругой тоже самая структура но адрес! ;)
     
  12. barton

    barton New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2008
    Сообщения:
    164
    Адрес:
    Czechoslovakia
    > а также имеют одинаковый размер

    не совсем так..
    юнион будет размером со структуру abc, а е - можно трактовать как первый байт (если считать char байтом) этой структуры
     
  13. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    barton
    Ну это один из возможных случаев, который как правило токо в VARIANTtag и юзается, больше особо то нигде и не видел надобности )
     
  14. barton

    barton New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2008
    Сообщения:
    164
    Адрес:
    Czechoslovakia
    Всмысле то, что в юнионе есть структура как поле ? Ну вообще много где на самом деле.. Например, в структуре IRP в DDK...
    PS: шнек-шнек =)
     
  15. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Код (Text):
    1. union
    2. Misc.PhysicalAddress dd ?
    3. Misc.VirtualSize dd ?
    4. ends
    Именованных нет.
     
  16. disaster

    disaster New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2009
    Сообщения:
    12
    Ну и если брать Си, то размер union такой, что в нём поместится максимальный его член и что union будет выровнен в памяти так, чтобы машина могла к нему нормально обращаться (впрочем не факт, возможно подобные махинации компилятор берёт на себя.) На счёт ассемблеров не знаю.