На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 404 405 [406] 407 408 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата Бобёр @
    Почему же нема, стек то вытащить можно.

    Можно, если не SEH, хотя уже после поста Qraizer, и это не помеха... Опыта мало с этим. Я на своем веку гдето раза 3 только встречался с всякими косяками в релизе или только на Win7... Еще руку не набил. :)

    Цитата Бобёр @
    Ну, как бы 99% пользователям винды это нафиг не надо.

    Ну это да... Но о разработчиках могли бы подумать, хотя это комерция, левое бабло, кто придумает круче дампер :unsure:

    Добавлено
    Цитата KILLER @
    кто придумает круче дампер

    Вона на codeproject валяюца всякие StackWalker ... кстати ниче, помог тоже один раз :D
      map - это полная карта исполняемого модуля. Что, где, как называется итп.

      Добавлено
      Естественно там будут только публичные имена. Точнее, имена с внешним связыванием. Всякие там глобальные static отсутстуют.
        А на счет адресов, если кто то на другой тачке компилил - они такие же? я чето сомневаюсь както...

        Добавлено
        Цитата Qraizer @
        map - это полная карта исполняемого модуля. Что, где, как называется итп.

        Ну в юниксе - это так, да , в msvs, я помню что делал такой файл зачем то, но не помню такой же он как в юниксе? Я уже понял что такойже...
          Для COFF-формата там виртуальные адреса, RVA. Поэтому они, отображаясь в собственное адресное пространство процесса, отличаться могут разве что для DLL. С ними могут быть определённые проблемы, надо знать настоящий адрес загрузки. Но это легко преодолимо - а под XP и ниже ещё и настоятельно рекомендуемо - явным указанием линкеру базовых адресов загрузки DLLs (разумеется, если они не разделяются разными процессами, в этом случае ремапить надо с учётом всех заинтересованных сторон), подбирая их регионы непересекающимися. Для этого и тулзы есть простые, ещё со времён Win9x, они даже уже готовые DLLки умеют вот так вот поредактровать.
            Собственно, можно в релизе получить map с подробным описанием, по какому адресу какая строка начинается (в объектник надо сгенерить номера строк). В бинарнике даже следов этой информации не будет, а в map можно записать (с учетом возможности перемещаемой загрузки)
              Цитата Qraizer @
              Та не. Это всё std::vector<bool> виноват. Скорее для вектора надо было бы через итераторы.

              Слабо верится. Потому что vector<bool> - это, всё-таки, вектор, а не string. Хотя, возможно, дело в том, что символы в строке могут быть переменной длины. Но тогда это не удовлетворяет требованию константной сложности операции...
                Не, символы в строке не могут быть переменной длины, это в массиве символов могут. :D
                Если серьёзно и без тролльства, то это не имеет отношения к константности операций. Ну будет время обработки UTF-8 строк чуток выше, нежели UTF-32, оно ж всё равно константное.
                  Интересно, а можно ли в указанных языках реализовать динамические переменные? А ля
                  ExpandedWrap disabled
                    var CONTEXT : Int
                     
                    procedure p ()
                      CONTEXT++
                      printf( "%d\n", CONTEXT )
                    end
                     
                    procedure p_Test ()
                      var c : Int,
                          s : String
                      with CONTEXT = 0,
                           STDOUT  = new StringOutputStream() do
                        p()
                        c =  CONTEXT
                        s = (STDOUT as StringOutputStream).getString()
                      end
                      printf( "-- %d, %s\n", c, s )
                    end
                     
                    CONTEXT = 3
                    printf( "%d\n", CONTEXT )
                    p_Test()
                    printf( "%d\n", CONTEXT )

                  =>
                  ExpandedWrap disabled
                    3
                    -- 1, "1\n"
                    3
                    Ничего не понял :D
                      Еще вопрос знатокам C#: я тут понатыкался на инфу, что обычный цикл for в большинстве случаев (массивы, числовые диапазоны) показывает заметно лучшую производительность, нежели foreach, так ли это и если да, то почему?

                      Добавлено
                      Цитата D_KEY @
                      Ничего не понял :D

                      Эм... ну смотри, в блоке with происходит создание новых биндингов для (глобальных) переменных CONTEXT и STDOUT(ее я не объявлял, т.к. она типа искаробки), поэтому при вызове p внутри этого блока она использует эти новые биндинги, т.е. если бы было просто
                      ExpandedWrap disabled
                            var CONTEXT : Int
                            
                            procedure p ()
                              CONTEXT++
                              printf( "%d\n", CONTEXT )
                            end
                            
                            procedure p_Test ()
                              var c : Int,
                                  s : String
                              CONTEXT = 0 // это изменит глобальное значение
                              STDOUT  = new StringOutputStream() // тоже изменит глобальное значение
                              p()
                              c =  CONTEXT
                              s = (STDOUT as StringOutputStream).getString()
                              // теперь нужно бы восстановить как было
                              // CONTEX = ? // блин, забыл сохранить предыдущее значение
                              // STDOUT = ? // и теперь
                              printf( "-- %d, %s\n", c, s ) // упс, а печатаем-то мы в строку, а не системный поток
                              // ну о потокобезопасности не забыть бы
                            end

                      Соответственно и вывод будет совсем другим.
                        Цитата korvin @
                        Интересно, а можно ли в указанных языках реализовать динамические переменные? А ля

                        Цитата korvin @
                        Эм... ну смотри, в блоке with происходит создание новых биндингов для (глобальных) переменных CONTEXT и STDOUT(ее я не объявлял, т.к. она типа искаробки), поэтому при вызове p внутри этого блока она использует эти новые биндинги, т.е. если бы было просто
                        Есть-есть. :yes: Нужно просто объявить локальную переменную с тем же именем.
                          korvin, вообще-то это обычная лексическая область видимости.
                          Другое дело, если тебе нужно что-то в стиле CL. Но отличия будут проявлятся разве что в замыканиях.
                          Сообщение отредактировано: D_KEY -
                            Цитата Повстанець @
                            Есть-есть. :yes: Нужно просто объявить локальную переменную с тем же именем.

                            ORLY?
                            ExpandedWrap disabled
                              #include <iostream>
                               
                              int CONTEXT;
                               
                              void p () {
                                  CONTEXT++;
                              }
                               
                              void p_Test () {
                                  int CONTEXT = 0;
                                  p();
                                  std::cout << CONTEXT << std::endl;
                              }
                               
                              int main () {
                                  CONTEXT = 3;
                                  std::cout << CONTEXT << std::endl;
                                  p_Test();
                                  std::cout << CONTEXT << std::endl;
                                  return 0;
                              }

                            =>
                            ExpandedWrap disabled
                              3
                              0
                              4

                            а должно быть (в случае динамических переменных)
                            ExpandedWrap disabled
                              3
                              1
                              3


                            Добавлено
                            Цитата D_KEY @
                            korvin, вообще-то это обычная лексическая область видимости.

                            Вообще-то динамическая.
                              korvin, сделай p через #define :)
                                Цитата D_KEY @
                                korvin, сделай p через #define :)

                                Хорошая шутка, спасибо, посмеялся.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 404 405 [406] 407 408 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5345 ]   [ 14 queries used ]   [ Generated: 30.07.26, 03:18 GMT ]