Моя главная причина использовать каждый - когда код идет вне 100 файлов.
, Хотя ctags может сделать работу, , некоторые IDE имеют довольно хороший способ переместиться по файлам легко супер быстро.
Это экономит время, когда у Вас есть большая работа, чтобы сделать.
Linux предоставляет вам / proc / pid / maps
и / proc / pid / mem
для вашего удовольствия. Конечно, писать там нужно очень осторожно. Кроме того, имейте в виду, что единственный сегмент памяти, доступный для каждого процесса, является его собственным, поэтому вам, вероятно, придется выполнить некоторые подключения и исправления кода, чтобы добраться туда, куда вы хотите. В любом случае удачи. :)
edit: Это все еще в несколько раз сложнее, чем аудит кода, который также имеет больше шансов выявить реальный источник проблемы.
Ваше понимание неверно. Вы не можете заполнить память программы случайными данными до того, как она начнет выполняться, и даже если бы вы могли, это не решило бы вашу проблему.
Если ваша программа на Фортране объявляет переменную с плавающей запятой одинарной точности, компилятор выделит 32-битную ячейка в памяти для хранения значения. Каждый раз, когда ваша программа читает из переменной, процессор будет извлекать из ячейки 32-битное значение. Каждый раз, когда вы присваиваете переменную, процессор будет записывать в ячейку 32-битное значение. Ни при каких обстоятельствах случайные биты не должны «просачиваться» в значение из ячеек до или после ячейки.
Хотя арифметика с плавающей запятой не является точной, она также не случайна. Если вы вычислите 1.0 / 3.0 + 1.0 / 3.0 + 1.0 / 3.0)
тысячу раз, вы получите 0,99999 ...
каждый раз.
Второй момент заключается в том, что, когда программа выполняется в Linux, вся память данных тщательно предварительно инициализируется операционной системой до нуля. Это сделано для того, чтобы ваша программа не вел себя по-разному каждый раз, когда вы ее запускаете: это было бы ПЛОХО. РЕДАКТИРОВАТЬ: еще одна причина, по которой это делается, состоит в том, чтобы предотвратить утечку частной информации из одного процесса в другой.
(Комментаторы: обратите внимание, что я намеренно пропустил ряд вопросов, чтобы сделать объяснение простым.)
вся память данных тщательно предварительно инициализируется операционной системой до нуля. Это сделано для того, чтобы ваша программа не вел себя по-разному каждый раз, когда вы ее запускаете: это было бы ПЛОХО. РЕДАКТИРОВАТЬ: еще одна причина, по которой это делается, состоит в том, чтобы предотвратить утечку частной информации из одного процесса в другой.(Комментаторы: обратите внимание, что я намеренно пропустил ряд вопросов, чтобы сделать объяснение простым.)
вся память данных тщательно предварительно инициализируется операционной системой до нуля. Это сделано для того, чтобы ваша программа не вел себя по-разному каждый раз, когда вы ее запускаете: это было бы ПЛОХО. РЕДАКТИРОВАТЬ: еще одна причина, по которой это делается, состоит в том, чтобы предотвратить утечку частной информации из одного процесса в другой.(Комментаторы: обратите внимание, что я намеренно пропустил ряд вопросов, чтобы сделать объяснение простым.)
Если у вас последняя (кажется,> = 2.4) glibc, вы можете использовать переменную окружения MALLOC_PERTURB_, чтобы функция malloc () возвращала память, для которой установлено какое-то значение. См. http://udrepper.livejournal.com/11429.html и внутри http://people.redhat.com/drepper/defprogramming.pdf
Тогда вопрос в том, если ваш Fortran программа использует glibc malloc (), я думаю, это зависит от компилятора Фортрана.
Я бы попытался написать модульные тесты, используя что-то вроде fUnit , чтобы гарантировать, что значения двойной точности всегда работают должным образом, написав некоторые тесты, которые требуют результата двойной точности в случаях, когда Часто появляется результат сохранения одинарной точности.
Например: напишите тест, который вызывает функцию с различными входами, которая должна генерировать выходные данные двойной точности, и проверьте, что это работает с помощью assert ().
То, чего вы хотите достичь, хотя и благородно по замыслу и интересно задумано, напоминает мне о планах Хитрого Койота по поимке Roadrunner, в то время как винтовка и снайперская стрельба были лучший вариант.
Если у вас есть проблема, которую вы представляете, это означает, что в вашем коде есть структурная проблема, и вы теряете контроль над своей программой. Хотя я прекрасно знаю, как программное обеспечение разрабатывается в академических кругах и в фортране, броситься со скалы только потому, что это делает остальной мир, проблематично.
Что вам следует сделать, так это провести аудит вашего кода. а затем избить какого-нибудь аспиранта, если он снова все испортит.
Я думаю, что случайные данные значительно усложнят отладку. Случайность в ответах вызвана случайными значениями в памяти или ошибкой вычислений? Я бы сказал, что фиксированные и известные значения были бы лучше.
Со стороны FORTRAN, вы говорите, что числа «смешанной точности» используются взаимозаменяемо? Я не понимаю, в чем именно проблема.
Но я понятия не имею, как чем-нибудь заполнить свободную память в Linux.
Вы попросили помощи в реализации вашего решения проблемы, заключающейся в рандомизации памяти. Однако я считаю, что это странное и, возможно, сложное для отладки решение.
Мне кажется, что вы выиграете больше от - инструменты статического анализа кода - специфическое модульное тестирование - контрольные списки для проверки кода, специально нацеленные на эту проблему
Иногда можно придумать решения еще проще; если вы можете обойтись без математики с одинарной точностью, вы можете предотвратить связывание таких библиотек, поэтому ошибка будет отображаться как ошибка ссылки; в начале процесса разработки. Удачи.