Объектно ориентированное программирование

Тема в разделе "WASM.WIN32", создана пользователем EvilsInterrupt, 16 ноя 2004.

  1. Arvensis

    Arvensis New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2004
    Сообщения:
    72
    Адрес:
    Russia
    EvilsInterrupt

    Не спорь. Каши много.

    Что до Виртуального Адресного Пространства, - да, ты действительно жутко ошибаешься, если думаешь, что операционной системе где-то обломалось дофига гигабайт свободной памяти, и она щедро по 4Гб раздает ее процессам, а все остальное - куча.

    Broken Sworda ты читал? Я тоже нет :) Пойду читать, и тебе того же советую. До шестой главы включительно - как минимум. Половина вопросов отпадет сама собой.
     
  2. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Приступаю к вопросу №2:

    Есть const int * pAge = new int;



    за тем чтобы в эту память ни че было записано, кто следит: компилятор или винда во время выполнение кода?



    а если:

    int * * const pAge = new int



    этот указатель нельзя изменить до компиляции или во вовремя работы кода тоже?
     
  3. letopisec

    letopisec New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    228
    >за тем чтобы в эту память ни че было записано, кто следит: компилятор или винда во время выполнение кода?



    компилятор



    >этот указатель нельзя изменить



    непонятен вопрос. Если идёт речь о значении указателя, то можно
     
  4. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Есть const int * pAge = new int;



    Что это за шедевр?



    int * * const pAge = new int



    А вот от этого у меня вообще глаза на лоб вылезли! 8-()
     
  5. Turkish

    Turkish New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    80
    Адрес:
    Russia
    Ну нету в Винде опреатора new. Поэтому каждый new компилируется в xxxxAlloc.
     
  6. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    Turkish



    Я думаю что это не обязательно так... Все зависит от компилятора: как это в нем реализованно. Место может также выделяться не в куче, а на стеке...
     
  7. ozzman

    ozzman New Member

    Публикаций:
    0
    Регистрация:
    22 янв 2004
    Сообщения:
    56
    Oleg_SK

    >Я думаю что это не обязательно так... Все зависит от компилятора: как это в нем реализованно.

    ну, компиляторы все же пишут не от балды, а худо-бедно придерживаясь стандарта.
     
  8. vinnie_pooh

    vinnie_pooh New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    98
    Код (Text):
    1.    @@@@     @@@@     @@@@ @@@@ @  @ @  @ @@@ @   @    @@@@@ @  @ @@@@@
    2.    @  @@@@@@@  @     @  @ @  @ @  @ @  @ @   @@ @@      @   @  @   @  
    3.    @ @@     @@ @     @  @ @  @ @  @ @  @ @@@ @ @ @      @   @  @   @  
    4.    @@   @ @   @@@@   @  @ @@@@ @ @@ @@@@ @   @   @      @    @@@   @  
    5.    @     @     @  @  @  @ @    @@ @    @ @   @   @      @      @   @  
    6.    @           @@ @  @  @ @    @  @    @ @@@ @   @      @    @@    @  
    7.     @   @@@   @ @ @                                                  
    8.      @@@   @@@  @ @                                                  
    9.   @@@@  @@@  @@@@ @        @@           @@        @@@@@@@     @@@@    
    10.  @ @           @  @      @@  @@       @@  @@      @     @    @    @  
    11. @ @@           @@@      @      @     @      @     @     @    @    @  
    12. @ @             @       @      @     @      @     @     @         @  
    13. @ @             @       @      @     @      @     @     @         @  
    14. @ @@           @@      @        @   @        @    @     @        @    
    15. @ @@           @       @        @   @        @    @     @       @    
    16. @@ @@@       @@@        @      @     @      @     @     @      @      
    17.      @@@@@@@@@          @      @     @      @     @     @      @      
    18.       @@   @@           @      @     @      @     @     @      @      
    19.      @  @ @  @           @@  @@       @@  @@      @     @            
    20.       @@   @@              @@           @@        @     @      @      


    :)
     
  9. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    :)))))))))))))))))))))))))))))))
     
  10. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    EvilsInterrupt >




    Програмист :)





    ozzman >




    В стандарте нет ни слова ни о xxxxAlloc, ни о виндос.





    vinnie_pooh



    ВО-ВО !!
     
  11. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    >ВО-ВО !!



    Чтобы получить сложное надо взять сначала простое
     
  12. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Если в тексте кода на c++ создать объект в динамической памяти и присвоить в постоянный указатель:

    class Girl

    {

    public:

    bla,bla;

    private:

    bla,bla;

    };



    Girl * const pNatali = new Girl;



    кто будет следить за тем чтобы этот указатель не изменился? Программист, т.к. компилятор ошибки даст. А если я создам код и во время выполниния проги это место(указатель) буду менять позволит ли мне это винда?



    2)

    const Girl * pNatali = new Girl;



    Если я в коде не изменю, но создам к примеру вирус и попробую изменить место на которое указывает pNatali, то позволит ли мне винда?
     
  13. ozzman

    ozzman New Member

    Публикаций:
    0
    Регистрация:
    22 янв 2004
    Сообщения:
    56
    S_T_A_S_

    то есть, гипотетически, я могу написать компилятор, который по new будет выделять память, например, в стеке?

    имхо, стандарт этого непозволит.
     
  14. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    ozzman

    Причем здесь компилятор? Можно определить оператор new для конкретного типа.
     
  15. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Что есть стэк?

    Если речь идёт о памяти, к которой мы адресуемся через регистры ESP (EBP), то что мешает обращаться к этой же памяти через другие регистры?

    Если же говорим о абстрактном хранилище с доступом "First In, Last Out", то конечно не удобно выделять там память под объекты, которые могут быть удалены в произвольное время. для этих целей лучше подходит хранилище с произвольным доступом (куча).

    А стандарту вообще фиолетово до особенностей архитектуры процессоров x86 :derisive:
     
  16. ozzman

    ozzman New Member

    Публикаций:
    0
    Регистрация:
    22 янв 2004
    Сообщения:
    56
    q_q

    S_T_A_S_

    речь идет именно про реализацию компилятора.

    Как там реализован или может быть реализован оператор new, не нарушая стандарта.
     
  17. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Ещё раз повторю: в стандарте написано, что БАЙТ может быть НЕ РАВЕН 8 БИТАМ,

    до стэка (который есть не у всех процессоров) ему тем более дела нет.



    ЗЫ

    Стандарт называется: ansi_iso_iec_14882_1998.pdf
     
  18. Dart_Bobr

    Dart_Bobr New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    100
    Адрес:
    Ukraine
    EvilsInterrupt

    2) имхо, позволит
     
  19. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    сказал Oleg_SK. =)



    у тя действительно каша в голове. не торопись. все понимают - изучать язык программирования (любой) довольно скушно, тем более изучать его стандарт (по ISO) ;). Изучать архитектуру ОС (любой) несколько интереснее. Но не нужно смешивать и подменять понятия ...



    Вот на твои некорректные вопросы я мог бы ответить так(например):



    1. С++ - язык программирования (какой последний ISO не помню =) )

    2. Компилляторы под ОС Windows такие как Borland, M$ Visual, етц. поддерживают этот язык вместе со своими прибамбасами называемыми специфичными расширениями.

    3. !!!_ВСЕ_!!! компилляторы для ОС Виндовоз преобразуют операторы и прочую, специфичную для каждого конкретного языка программирования , хрень, в конечном виде к вызовам системных сервисов. Например (не точно!): new -> VirtualAlloc -> NtAllocateVirtualMemory



    точно так же, если ты создаешь "кучу", то в Виндовозе это в конечном итоге преобразуется в вызов ZwAllocateVirtualMemory - что есть синоним для NtAllocateVirtualMemory.



    Вот тебе наглядный пример связи языка программирования С++ с ОС Виндовоз.



    Что там из new в конечном итоге точно получается ты можешь сам посмотреть - возьми IDA и все все увидишь =) я сейчас не помню, а лезть туда неохота....
     
  20. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    совершенно верно S_T_A_S_ ! как истынный Воин дзена ты глаголишь истину ;)...



    ибо только "октет" ДОЛЖЕН быть равен 8 битам, всегда и везде... в смысле на любой платформе и в любом компиляторе