Реализация потоковой компиляции С++. Выделение памяти

Тема в разделе "WASM.BEGINNERS", создана пользователем Titch, 29 фев 2008.

  1. Titch

    Titch Иванов Арсений

    Публикаций:
    0
    Регистрация:
    29 фев 2008
    Сообщения:
    4
    Адрес:
    г. Минск
    Есть программа, построенная на классах. Каждый объект класса имеет методы класса, которые позволяют ему исполнять участок кода из текстового файла (код написан на сильно урезанном С++).
    Вопрос с разбором кода на морфемы и выражения почти решился. Есть проблемы с выделением памяти на переменные, которые объявляются в текстовом файле.

    Был предложен метод, который бы подразумевал динамическое выделение памяти в самой программе, после чего было бы этот кусок памяти бы нарезался, маркеровался и в дальнейшем использовался на переменные. Но этот способ очень громоздкий. Может есть какие-либо иные методы?

    PS: Заранее благодарен!
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Стек?
     
  3. Titch

    Titch Иванов Арсений

    Публикаций:
    0
    Регистрация:
    29 фев 2008
    Сообщения:
    4
    Адрес:
    г. Минск
    А какая здесь связь со стеком?..
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Хранить переменные в своем стеке, чем не вариант?
     
  5. ch1pa

    ch1pa New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2007
    Сообщения:
    38
    GetMem,FreeMem - разве не подходят (если я прав.понял)..?
     
  6. Titch

    Titch Иванов Арсений

    Публикаций:
    0
    Регистрация:
    29 фев 2008
    Сообщения:
    4
    Адрес:
    г. Минск
    GetMem,FreeMem - подходят... И new, и malloc, и иже с ними подходят. Но это всё функции выделения памяти. А проблема не в том, чтобы просто выделить память, а в том, чтобы эту область памяти привязать к определённой переменной определённого типа, и чтобы потом посредством каких-либо механизмов можно было бы обратится к этой переменной по имени из этого "текстового" участка кода. Разбор морфем здесь ни к чему, потому я его не рассматриваю.
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    Titch
    Используй явное преобразование типов.

    Код (Text):
    1. void *aq = new char[100];
    2.  
    3. PCONTEXT p = (PCONTEXT)aq;
     
  8. Titch

    Titch Иванов Арсений

    Публикаций:
    0
    Регистрация:
    29 фев 2008
    Сообщения:
    4
    Адрес:
    г. Минск
    будет код к вечеру воскресенья - покажу о чём я...

    в рамках студии использование явного приведения типа - это рационально (тут каждый указатель привязан к типу), а как только прога скомпилировалась, то все эти указатели станут типа void, просто логикой компилятора предусмотренно, чтобы они не смешивались. но т.к. здесь речь идёт о исполнении уже скомпилированной программы, то придётся все типы таскать с собой вместе с именем переменной и указателем на неё....

    будет что-то вроде массива двумерного:

    Код (Text):
    1. ИМЯ      УКАЗАТЕЛЬ       ТИП
    2.  a       0x092AB032       int
    3.  b       0x0CF987E6      float
    4.  c       0x9789FA76     other
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Titch
    Тоже мне проблема, забить в массив (а ИМХО лучше в сортированное двоичное дерево) список идентификаторов и соответствующих им адресов и проходить по массиву (дереву) каждый раз, когда на идентифификатор при парсинге натыкаетесь. Наткнулись на идентификатор, посмотрели в соответствующей ему структуре адрес и тип, сделали с содержимым адреса то, что написано в пропарсиваемом коде.