Замечания и предложения

Дебаггер показывает, как хранится статический массив у нас в памяти. Он хранится как массив, индексируемый с нуля.

А какой плагин?

Пока добрался до списка локальный переменных: Debugger.ProcessEventArgs.Process.LocalVariables из события Process_DebuggeeStateChanged где Process из WorkbenchServiceFactory.DebuggerManager.DebuggedProcess

Элементы списка экземпляры класса Debugger.Value Примитивные типы вроде как через строку можно получить. Value с массивом получают так:

var value = e.Process.LocalVariables.ToArray();
var array = value[3].GetMembers()[0]

Ну и сами значения через

var elms = array.GetArrayElements().ToArray();

А вот ссылку на экземпляр “статического массива” пока не получил… Не понял пока… Нет экземпляра, нет данных о классе и members…

Есть еще мысль залезть в сам модуль и через рефлексию получить сам экземпляр класса, но надеялся через IDE данные получить.

А какой плагин?

Некий рекорд написания кода и процесса пошаговой отладки, чтобы затем можно было визуализировать в другой программе. С изменением текста и перемещением курсора быстро разобрался. А вот с отладкой немного запутался. Позицию текущей выполняемой строки получил. Имена и значения локальных переменных из этого списка легко получить. А вот с массивом завис. Собственно, мне только простые вещи нужны, для учебных видео, для школьников. В основном в объеме ЕГЭ. Поэтому перечисления, ООП и прочие сложности не нужны.

Сейчас неиспользуемые методы выкидываются из exe если они находятся в pcu. А поскольку у вас модули, то непонятно, почему размер файлов такой большой

Обязательно надо разобраться, почему у Вас 6 Мб выходит exe

Статический массив у нас называется NullBasedArray. Найдите все вхождения этого слова в проекте - может, это наведёт на мысль. И да - рефлексией!

13 сообщений перенесены в новую тему: OpenGL стандартный модуль

Пожалуйста, добавьте поддержку индексов типа BigInteger в динамических массивах. Из-за того, что её нет, мне в моём проекте придётся дублировать половину или треть кода программы. Если вы её не добавите, прошу сказать, как перевести значение в BigInteger в значение в Integer, если значение в BigInteger точно лежит в допустимых пределах для Integer (MinInteger<=BigInteger<=MaxInteger).

Зачем?

Явным приведением типа. integer(a)

begin
  var b := BigInteger(128);
  var a := integer(b);
end.

Вам не хватает массива из 2 147 483 647 элементов? Может, есть смысл задуматься об алгоритме?

1 лайк

Я легко могу представить себе такой массив, и даже больше. Но одновременно представить использование его в Паскале мне трудно. Если нужен такой массив, может надо подумать еще и об языке?

Нет, ну если писать в массив сведения о каждом атоме во Вселенной - конечно. Но, может проще заняться каким-то делом? )))

Чуть больше двух миллиардов степеней свободы - может быть и не среднее число в некоторых расчетах, однако ничем не выдающееся. Матрица 100 на 100 тысяч элементов вполне разумная. Насчет числа атомов - вот число Авогадро. И вот именно поэтому методами молекулярной динамики пока что сложно воспользоваться для чего-то близкого к макроскопическому размеру.

Если матрица разреженная - их и хранят и обрабатывают по совсем другим алгоритмам. Если плотная - смысл хранить триллионы, если их обработать не хватит никаких вычислительных ресурсов? И пишут там на фортране однозначно, не на Паскале.

1 лайк

Вот и я про то же самое.

Разве платформа .Net и множество библиотек-наработок не подходит для подобного?

Нет, если у вас вычисления на миллиарды ячеек - вам подходят низкоуровневые языки как C++.

А вообще вы всё ещё не озвучили что вы пытаетесь сделать.

И еще об оперативной памяти компьютера - 16 Гб будет тут явно мало

Получается, что несмотря на наличие средств в самом .Net, выделение непрерывных областей для огромных структур с параллельными “фантомами” - особенно для 32-битных процессов - не спасёт ни дефрагментация, ни принудительный сбор мусора, ни файл подкачки, ни рейд-массив, ни масштабируемость.

Не стоит всё в кучу сваливать.

Проблема .Net в этом деле только в высокоуровневости. В нём код всегда будет медленнее.


При чём тут дефрагментация и RAID массивы?


Принудительная сборка мусора нужна только для дебага, .Net сам знает когда оперативка кончается а значит пора чистить.


Файл подкачки спасёт от падения, но не от проблем скорости, которых будет больше.


Так что вы сделать то пытаетесь?

Не подходит. Для этого используют суперкомпьютеры, или, как минимум, мультипроцессопрные системы с языками класса “Параллельный Фортран”. Понимаете, ну вот есть прогулочные яхты, а есть авианосцы. И то, и другое - суда. Но никто на пытается взлетать на самолете с палубы яхты, как и катать подружек по морю на авианосце.

1 лайк