Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 404 405 [406] 407 408 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#6076
,
|
|
|
|
Можно, если не SEH, хотя уже после поста Qraizer, и это не помеха... Опыта мало с этим. Я на своем веку гдето раза 3 только встречался с всякими косяками в релизе или только на Win7... Еще руку не набил. Ну это да... Но о разработчиках могли бы подумать, хотя это комерция, левое бабло, кто придумает круче дампер Добавлено Цитата KILLER @ кто придумает круче дампер Вона на codeproject валяюца всякие StackWalker ... кстати ниче, помог тоже один раз |
|
Сообщ.
#6077
,
|
|
|
|
map - это полная карта исполняемого модуля. Что, где, как называется итп.
Добавлено Естественно там будут только публичные имена. Точнее, имена с внешним связыванием. Всякие там глобальные static отсутстуют. |
|
Сообщ.
#6078
,
|
|
|
|
А на счет адресов, если кто то на другой тачке компилил - они такие же? я чето сомневаюсь както...
Добавлено Цитата Qraizer @ map - это полная карта исполняемого модуля. Что, где, как называется итп. Ну в юниксе - это так, да , в msvs, я помню что делал такой файл зачем то, но не помню такой же он как в юниксе? Я уже понял что такойже... |
|
Сообщ.
#6079
,
|
|
|
|
Для COFF-формата там виртуальные адреса, RVA. Поэтому они, отображаясь в собственное адресное пространство процесса, отличаться могут разве что для DLL. С ними могут быть определённые проблемы, надо знать настоящий адрес загрузки. Но это легко преодолимо - а под XP и ниже ещё и настоятельно рекомендуемо - явным указанием линкеру базовых адресов загрузки DLLs (разумеется, если они не разделяются разными процессами, в этом случае ремапить надо с учётом всех заинтересованных сторон), подбирая их регионы непересекающимися. Для этого и тулзы есть простые, ещё со времён Win9x, они даже уже готовые DLLки умеют вот так вот поредактровать.
|
|
Сообщ.
#6080
,
|
|
|
|
Собственно, можно в релизе получить map с подробным описанием, по какому адресу какая строка начинается (в объектник надо сгенерить номера строк). В бинарнике даже следов этой информации не будет, а в map можно записать (с учетом возможности перемещаемой загрузки)
|
|
Сообщ.
#6081
,
|
|
|
|
Цитата Qraizer @ Та не. Это всё std::vector<bool> виноват. Скорее для вектора надо было бы через итераторы. Слабо верится. Потому что vector<bool> - это, всё-таки, вектор, а не string. Хотя, возможно, дело в том, что символы в строке могут быть переменной длины. Но тогда это не удовлетворяет требованию константной сложности операции... |
|
Сообщ.
#6082
,
|
|
|
|
Не, символы в строке не могут быть переменной длины, это в массиве символов могут.
Если серьёзно и без тролльства, то это не имеет отношения к константности операций. Ну будет время обработки UTF-8 строк чуток выше, нежели UTF-32, оно ж всё равно константное. |
|
Сообщ.
#6083
,
|
|
|
|
Интересно, а можно ли в указанных языках реализовать динамические переменные? А ля
![]() ![]() 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 ) => ![]() ![]() 3 -- 1, "1\n" 3 |
|
Сообщ.
#6084
,
|
|
|
|
Ничего не понял
|
|
Сообщ.
#6085
,
|
|
|
|
Еще вопрос знатокам C#: я тут понатыкался на инфу, что обычный цикл for в большинстве случаев (массивы, числовые диапазоны) показывает заметно лучшую производительность, нежели foreach, так ли это и если да, то почему?
Добавлено Цитата D_KEY @ Ничего не понял ![]() Эм... ну смотри, в блоке with происходит создание новых биндингов для (глобальных) переменных CONTEXT и STDOUT(ее я не объявлял, т.к. она типа искаробки), поэтому при вызове p внутри этого блока она использует эти новые биндинги, т.е. если бы было просто ![]() ![]() 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 Соответственно и вывод будет совсем другим. |
|
Сообщ.
#6086
,
|
|
|
|
Цитата korvin @ Интересно, а можно ли в указанных языках реализовать динамические переменные? А ля Цитата korvin @ Есть-есть. Эм... ну смотри, в блоке with происходит создание новых биндингов для (глобальных) переменных CONTEXT и STDOUT(ее я не объявлял, т.к. она типа искаробки), поэтому при вызове p внутри этого блока она использует эти новые биндинги, т.е. если бы было просто Нужно просто объявить локальную переменную с тем же именем. |
|
Сообщ.
#6087
,
|
|
|
|
korvin, вообще-то это обычная лексическая область видимости.
Другое дело, если тебе нужно что-то в стиле CL. Но отличия будут проявлятся разве что в замыканиях. |
|
Сообщ.
#6088
,
|
|
|
|
Цитата Повстанець @ Есть-есть. Нужно просто объявить локальную переменную с тем же именем.ORLY? ![]() ![]() #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; } => ![]() ![]() 3 0 4 а должно быть (в случае динамических переменных) ![]() ![]() 3 1 3 Добавлено Цитата D_KEY @ korvin, вообще-то это обычная лексическая область видимости. Вообще-то динамическая. |
|
Сообщ.
#6089
,
|
|
|
|
korvin, сделай p через #define
|
|
Сообщ.
#6090
,
|
|
|
|
Цитата D_KEY @ korvin, сделай p через #define ![]() Хорошая шутка, спасибо, посмеялся. |