Наглядный пример "стека"

Discussion in 'Болталка' started by DiesIrae, 11 Jul 2019.

  1. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,019
    Likes Received:
    7,618
    Reputations:
    24
    Ну топик же был вообще про стек. Стек гарантированно поддерживает две вещи: push и pop. Остальное - от Лукавого :)
     
    CKAP likes this.
  2. CKAP

    CKAP Well-Known Member

    Joined:
    9 Oct 2015
    Messages:
    653
    Likes Received:
    2,862
    Reputations:
    8
    Понято. Ну раз уж ты тут.. ммм.. короче тоже вот появился вопросик. Поролейно с асмом хочу учить чистый Си, процедурный. Ну вопервых просто смотреть как это превращается в асм. А акцент на процедурный алгоритм.. ну есть мнение, что ооп это возможно ошибка человечества. Что скажешь об ооп?
     
  3. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    шо бля? enter/leave типа от балды задумали?
     
  4. CKAP

    CKAP Well-Known Member

    Joined:
    9 Oct 2015
    Messages:
    653
    Likes Received:
    2,862
    Reputations:
    8
    А что с ними не так? Это же просто подготовка стека.

    push bp
    mov bp,sp

    leave
    pop bp.

    пролог и эпилог
     
  5. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    это тебе в сторону кодогенерации двигать, хороший пример - clang, он тащемта открыт и пилят его совместимо с вижуал си, что феерическое говно от майкрософт
     
    CKAP likes this.
  6. CKAP

    CKAP Well-Known Member

    Joined:
    9 Oct 2015
    Messages:
    653
    Likes Received:
    2,862
    Reputations:
    8
    Ознакомлюсь.
     
  7. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    ну да, так и есть. просто как я говорил - после этого ебп+хх - это параметры ну и плюс память вызывающей функции заодно, а ебп-ХХ - это локальные переменные. но касаемо всех этих дел, даже с++ несмотря на стандарт ведёт себя по разному в разных реализациях типа gcc/msc/icc
     
  8. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,019
    Likes Received:
    7,618
    Reputations:
    24
    Это особенности архитектуры. Есессно не зря коли стек у нас лежит себе в выделенной для него памяти и к ней можно обращаться как тебе вздумается. Никаких накладных расходов нет, почему-бы не юзать ?

    Но стек "вообще" не предусматривает наличие избирательного доступа к какому-то адресу же. Если нужна маленькая компактная железка - дохуя будет накладно делать для стека вундервафлю, позволяющую такой трюк. Скажем в какой-нибудь стиральной машине - ну нахуй оно не надо. Стиральная машина будет стоить неоправданно дороже. На самом деле со стиралками хуй бы с ними, не велика разница... речь скорее о масштабных проектах типа коллайдеров в которых явно не стоит усложнять и без того сложное. Если сей стек нужен чисто для исполнения какого-то простого кода - нахуй тебе не надо пихать в него переменные для вызова функций. Хватает одних только регистров. Кроме того внутренний стек есть внутри некоторых микросхем и там ужЬ точно нет никакой адресации. Только push и pop.

    А что можно сказать об ООП. Охуенная штука если без фанатизма юзать. Бывает как нахуярят деревце и "фабрики классов" - сам черт ноги попереломает. Делают они это якобы для масштабируемости и прочих радостей но в реале получают они только головную боль, страдания и обилие багов.
     
    CKAP likes this.
  9. CKAP

    CKAP Well-Known Member

    Joined:
    9 Oct 2015
    Messages:
    653
    Likes Received:
    2,862
    Reputations:
    8
    Ооо понято.
     
  10. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    точнее говоря - долбоёбы, которые пилят код msc реально то ли индусы толи конченные деграды - за год нашёл 5 критических дыр, это из области например когда не происходил вызов родительского конструктора через брейс инит. итд. вообщем пиздецкие косяки.
     
    DartPhoenix and CKAP like this.
  11. CKAP

    CKAP Well-Known Member

    Joined:
    9 Oct 2015
    Messages:
    653
    Likes Received:
    2,862
    Reputations:
    8
    :D:D:D

    Про черт ногу сломит.. ну я видал код на питоне помойму, от какого то дедушки.. ооп, по всем правилам жанра + личный почерк программиста. Ну да там полный пиздец :D
     
  12. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    бро, а тебе не кажется что инструкция, которая исполняет push ebp; mov ebp, esp; sub esp XX какбэ была задумана разработчиками? и это enter
     
  13. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,019
    Likes Received:
    7,618
    Reputations:
    24
    Полный пиздец для тебя. А когда ты пытаешься собрать воедино такой код от десятка-другого девелоперов - это не пиздец. Я не знаю каким словом это назвать. Это полная вафля... И вот после многих недель страданий оно все собирается в одну кучу а ты и сам не знаешь как все это говно работает. Если внезапно оно упадет - вот тогда это будет реально полный пиздец ибо отследить что, где, куда и откуда - хуй получится. Легче в асм смотреть чем в исходники тогда :) Но не сильно легче. Разбавим все это немного шаблонами, перегрузкой операторов и несколькими индусами - получим коктейль от которого даже Бог сойдет с ума. Поэтому таких девелоперов надо расстреливать. У нас Бог и так безумен довольно, не надо рисковать его психическим здоровьем, это плохо кончится...
     
    CKAP likes this.
  14. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,019
    Likes Received:
    7,618
    Reputations:
    24
    Внутри микросхемы нет enter. Нету вообще этого принципиально. А стек есть. Аппаратный. И все в нем запихувается посредством транзисторной логики. Он даже не растет "вверх" или "вниз" как принято говорить в учебных заведениях. У него принципиально нет никаких адресов потому что эти транзисторы никак не адресуются. При команде "push" данные сдвигаются в следующий уровень транзисторов а предыдущий занимают новые данные. При обратной операции все ровно наоборот. Но это все-же стек ибо он выполняет условие FILO :)
     
    CKAP likes this.
  15. CKAP

    CKAP Well-Known Member

    Joined:
    9 Oct 2015
    Messages:
    653
    Likes Received:
    2,862
    Reputations:
    8
    [​IMG]
    Понято.. короче я пока процедурные алгоритмы поюзаю до усрачки, а потом подумаю об ооп.
    А вобче интересная штука получается... то есть че бы там на верхнем слое абстракции не придумали, все это обязано упасть на железо в виде асма. Это даже забавно.
     
  16. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    ну машины бывают либо стеково-работающие, либо регистрово, ты какието другие знаешь?)
     
  17. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    вообщето fetch-decode и конвеер, и кеши и промахи и много всего
     
  18. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    какой смысл обсуждать то во что не врубаемся?!
     
    CKAP and DartPhoenix like this.
  19. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,019
    Likes Received:
    7,618
    Reputations:
    24
    Виртуальные. И там такой стек очень даже живет и применим. Если тебе не нужна адресация для того чтобы поигаться с дядь Женей в кошки-мышки - то и нахуй оно тебе не надо реализовывать адресацию. Простая ВМ, простая логика - адресация не нужна. Стек существует.

    Но на самом деле тут вопрос же в терминах. То как оно работает и то как определено в конкретной архитектуре - разные вещи слегка.
     
    CKAP likes this.
  20. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,019
    Likes Received:
    7,618
    Reputations:
    24
    Ну в принципе да, но для корректности - стек это только push и pop. Это - везде одинаково и твердо как гранит. А дальше могут быть различия.
     
    CKAP likes this.